Vue+DevExtreme:如何在DxSimpleItem中通过Ref更新dxTextBox值?
解决方案
问题核心在于你试图单独操作输入框的Ref,但DevExtreme的DataGrid编辑表单是和数据源绑定的,直接修改控件值不会同步到编辑的行数据中,导致保存时无法识别。正确的做法是更新当前编辑行的数据源字段,让表单自动同步值。
步骤1:移除错误的editor-options绑定
将imageFileName对应的DxSimpleItem修改为纯数据绑定,去掉手动指定的value:
<DxSimpleItem data-field="imageFileName" editor-type="dxTextBox" />
步骤2:在文件上传完成后更新编辑行数据
在onUploaded函数中,通过DataGrid实例获取编辑表单,直接更新imageFileName字段的值:
function onUploaded(e){ const imageId = e.request.response.replaceAll('"',''); // 获取DataGrid实例 const dataGridInstance = dataGridRef.value.instance; // 获取当前编辑的表单实例 const editForm = dataGridInstance.getEditingForm(); // 更新表单字段值,这会自动同步到编辑的行数据中 editForm.updateData('imageFileName', imageId); toastr['success'](`Image Uploaded: ${imageId}`); }
原理说明
getEditingForm()获取当前打开的编辑表单实例updateData(fieldName, value)方法会将值同步到表单控件和DataGrid的编辑行数据中,保存时会自动提交该字段的修改
备选方案(直接修改编辑行数据)
如果上述方法不生效,也可以直接操作编辑行的数据对象:
function onUploaded(e){ const imageId = e.request.response.replaceAll('"',''); const dataGridInstance = dataGridRef.value.instance; // 获取当前编辑的行数据 const editData = dataGridInstance.editing.editData; if(editData){ // 更新字段值 editData.imageFileName = imageId; // 通知表单刷新 dataGridInstance.refresh(); } toastr['success'](`Image Uploaded: ${imageId}`); }
这样修改后,文件上传成功后,imageFileName输入框会自动显示上传后的图片ID,且保存操作能正确识别到该字段的修改。
内容的提问来源于stack exchange,提问作者PENGUIN
相关产品推荐
相关产品推荐

