You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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('&quot;','');
  
  // 获取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('&quot;','');
  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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 22:22:04