在form.submit之后的extjs store.load

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在form.submit之后的extjs store.load相关的知识,希望对你有一定的参考价值。

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

该过程如下:

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

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

我认为这应该是一个简单的问题,但我没有任何想法如何解决它。

答案

这是我在我的代码库中找到的剪辑(在控制器内部):

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返回),但我想它应该工作。

另一答案

这是我的一些代码:

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();
}
另一答案

您可以在警告框中使用表单。我在这里用了一个窗口。然后在提交表单时,您可以使用findRecord从商店中查找记录并进行编辑。为了更好的解释,请找到小提琴here。 P.S抱歉我正在度假。如果它是正确的,请将其标记为答案,以便将来帮助其他人。或者请评论是否有需要更改的内容。谢谢

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();

})

以上是关于在form.submit之后的extjs store.load的主要内容,如果未能解决你的问题,请参考以下文章

Extjs ajax form 提交

Extjs的form跨域提交文件时,无法获取返回结果

jsp页面提交form表单,后台action跳转之后自动调用页面中的js方法。并且带有参数。如何处理?

Jquery form submit() 到控制器中的操作然后返回一个对象给客户端而不是重新加载页面

Extjs中如何遍历grid的数据(正在显示的数据)

ExtJS 网格过滤器:如何从外部 json 加载“列表”过滤器选项?