2017-04-03 9 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!

関連する問題