在form.submit之后extjs store.load

时间:2018-10-01 13:58:08

标签: extjs

在用户下载PDF之后,我正在尝试重新加载Extjs商店。

该过程如下:

  • 用户双击GridPanel中的单元格
  • 创建,提交表单,后端中的过程创建一个PDF并对GridPanel存储的数据进行一些更改
  • PDF将由用户下载

但是如何用新数据重新加载商店? 提交表单时没有afterRender。

我认为这应该是一个简单的问题,但是我不知道如何解决。

3 个答案:

答案 0 :(得分:0)

这是我在代码库中(在控制器内部)发现的一个片段:

var form = button.up().up().down('form').getForm();
form.submit({ success : this.onFileUpload, failure: this.onFileUpload, scope: this});
...
onFileUpload: function (form, action){
    var data = action.result.data;
    ...
    if (action.result.success){
    ...
       //**your store reload could be here!**
    ...
    } else {
      ...
    }
}

我的表单响应不响应文件(只是一些标准的html返回值),但我想它应该可以工作。

答案 1 :(得分:0)

这是我的一些代码:

function makeprintForm(array, setStatusX, grid) {

     var filename = 'asd.pdf';

     var url_pdf = 'someURL?FileName=' + filename;

     var printForm = Ext.create('Ext.form.Panel', ({

          url: currentContextPath + encodeURIComponent('http://' + host + ':' + port + url_pdf),
          hidden: true,
          id: 'printForm',
          name: 'printForm',
          method: 'post',
          standardSubmit: true,
          target: '_blank',
          items: [{
                    xtype: 'textfield',
                    fieldLabel: 'print_id',
                    name: 'print_id',
                    value: array
               },
               {
                    xtype: 'textfield',
                    fieldLabel: 'username',
                    name: 'username',
                    value: username
               },
               {
                    xtype: 'textfield',
                    fieldLabel: 'language_field',
                    name: 'language',
                    value: language
               }
          ]
     }));

     Ext.getCmp('printForm').getForm().submit({ success : this.reload_grid_after_submit(), scope: document.getElementById(nameSpace + 'formIS')});
}

function reload_grid_after_submit(){
     console.log('reload_grid_after_submit');
     Ext.getCmp('grid').getStore().proxy.setExtraParam('status', 'NEW');
     Ext.getCmp('grid').getStore().load();
}

答案 2 :(得分:0)

您可以在警报框中使用表格。我在这里用了一个窗户。然后,在提交表单时,可以使用findRecord从商店中查找记录并进行编辑。为了获得更好的解释,请找到小提琴here。附言:抱歉,我正在放假。如果正确,请标记为答案,以便将来对其他人有帮助。或者,如果有需要更改的地方,请发表评论。谢谢

Ext.getCmp('myGrid').addListener('rowdblclick', function (a, b, c, d) {

    win = new Ext.Window({
        width: 300,
        height: 150,
        draggable: false,
        border: false,
        modal: true,
        resizable: false,
        items: [{
            xtype: 'textfield',
            fieldLabel: 'What is your new name',
            id: 'newNameField'
        }, {
            xtype: 'button',
            name: 'sampleButton',
            text: 'Change My Name!',
            style: 'margin:15px',
            width: 150,
            handler: function () {
                name = Ext.getCmp('myGrid').getStore().getAt(d).data['name'];
                console.log(name);
                var newName = Ext.getCmp("newNameField").value;
                console.log("replacing " + name + " with " + newName + " in the store");
                var entry = userStore.findRecord('name', name);
                entry.set('name', newName);
                win.hide();

            }
        }]
    })
    win.show();

})