Extjs4 Ext js表单、模型和文件上传

Extjs4 Ext js表单、模型和文件上传,extjs4,Extjs4,我想澄清Ext4模型如何与表单面板关联。 假设我有一个模型,例如“User”,它附加了一个REST代理 当我想修改用户参数时,我使用表单的 loadRecord( Ext.data.Model record ) : Ext.form.Basic 方法设置窗体的字段值 修改后,我调用“updateRecord”方法,将表单中的更改发送到加载的模型,然后使用模型的“save”方法将更改发送到服务器。这非常有效,似乎符合extmvc的概念 问题: 但是,问题是:如果我需要上传文件,同时修改用户数据

我想澄清Ext4模型如何与表单面板关联。 假设我有一个模型,例如“User”,它附加了一个REST代理

当我想修改用户参数时,我使用表单的

loadRecord( Ext.data.Model record ) : Ext.form.Basic 
方法设置窗体的字段值

修改后,我调用“updateRecord”方法,将表单中的更改发送到加载的模型,然后使用模型的“save”方法将更改发送到服务器。这非常有效,似乎符合extmvc的概念

问题: 但是,问题是:如果我需要上传文件,同时修改用户数据(例如,头像),我应该如何遵守MVC。根据我从文档中学到的,我应该切换到使用表单的“提交”方法来向服务器发送更新的数据,包括文件

在这种情况下,我看到了几个缺点:

  • 加载到表单中的原始模型将不会更新
  • 如果我更新模型(使用“updateRecord”或其他方式),模型将保持脏状态,但是,更改已经发送到服务器
  • 表单和模型应该应用相同的代理配置,这样我就不需要更改服务器端
这是通过ext表单实现文件上传的正确方法吗?
有没有办法用model.save方法来做到这一点,让MVC更时尚?

我认为你不能把这两件事结合在一起。文件上传总是与提交其余数据不同。但是,您可以做什么:

  • 有一个按钮来选择并上传文件到服务器。但不要将文件保存到保存用户的同一位置(例如,可以使用单独的文件存储,只将文件名保存到用户记录中)

  • 将用户记录更新发送到服务器时,请发送新文件名。这样,您的化身更新和其他数据更新将处于同一事务中


大多数浏览器不显示选定的文件名/路径,我认为这是不可能的。您不需要显示文件/路径-您需要先向服务器提交文件。服务器将保存该文件并返回一些名称(即服务器上此文件的名称),您稍后在更新用户记录时将使用此名称。这过于复杂:发送文件、接收文件、回复文件ID、接受文件ID,然后才调用model.save()。4个新操作只支持一个。然后不要这样做。并且对化身和常规字段有单独的操作。