2017-04-03 51 views
0

我有一个窗体的字段和网格。如何包含文件添加到表格提交

{ textfield }, 
{ textfield }, 
{ textfield }, 
etc..., 
{ grid with toolbar: filefield } 

在网格,我添加了一个filefield工具栏,我添加了一个变化监听器将文件添加到网格中:

addAttachment: function (field, value, eOpts) { 
     var me = this, 
      grid = field.up('grid'), 
      gridStore = grid.getStore(); 
     gridStore.add(
      { 
       filename: value, 
       dateadded: new Date() 
      }); 
    } 

基本上,我想将附件添加到网格首先让我可以发送多个文件到服务器。这可能吗?

目前,做form.getValues()只能获取窗体内的其他字段,而不能获取工具栏。获取商店项目似乎也没有包含正确的文件路径,因为它们的前缀为c:\fakepath\

我想要的只是推动所有表单值,包括存储在Save事件的网格中的所有文件。任何运气家伙?

回答

0

好的。因为,没有人回答,这是我所做的:

首先,而不是在网格的tbar中使用filefield,我使用button来代替。我添加了一个点击监听到该按钮增加了一个隐藏filefield到窗体:

addAttachment: function (button) { 
    var me = this, 
     form = button.up('form'), 
     grid = button.up('grid'), 
     gridStore = grid.getStore(), 
     newFileField = { 
      xtype: 'filefield', 
      hidden: true, 
      unused: true, //custom property to check if there is already an unused field 
      listeners: { 
       change: function (field, value, eOpts) { 
        gridStore.add(
        { 
         filename: value, 
         dateadded: new Date() 
        }); 
        field.unused = false; 
       } 
      } 
     }; 

    //if there is already an unused field, we don't need to add a newField to the form 
    if (!form.down('filefield[unused=true]')) { 
     form.add(newFileField); 
    } 
    //imitate the filefield trigger. this will show the file dialog 
    form.down('filefield[unused=true]').fileInputEl.dom.click(); 

} 

所以这是它。基本上,button只是模仿filefield文件对话框触发器,但实际发生的是它将新的filefield添加到表单中。所以现在调用form.getForm().submit()包含所有也在网格中的文件。

我希望这将有助于任何人在未来。

CHEERS!

相关问题