【问题标题】:How to get the data from the window to the main screen如何从窗口获取数据到主屏幕
【发布时间】:2019-09-13 09:55:08
【问题描述】:

在某些 Ajax 调用成功后,我打开了一个窗口,并在窗口中附加了响应。这是我的代码。

success: function (response) {
    var data = Ext.decode(response.data);
    var window = Ext.widget('win');
    window.data = data;
    window.show();
},

现在我正在做一些操作,所有的 manuplitaed 数据都可以在 window 对象中使用。保存后我正在关闭窗口。在父级上,当我尝试像这样访问时,我没有得到任何价值。如何处理这个。

someFunction : function(){
    var window = Ext.widget('win');
        window.data ; // Fail (No data available).
}

【问题讨论】:

  • 您需要更多地异步思考。 window.data 在调用窗口后立即执行,即在数据更改之前。考虑添加回调函数或某种处理程序,以便知道窗口何时关闭并且可以将数据添加到变量中
  • 感谢@Laurens 提供任何链接的想法,我可以使用回调的方式。
  • 我猜窗口的默认 closeAction 是销毁,将其设置为隐藏,它应该可以工作 - 文档在这里:docs.sencha.com/extjs/6.5.3/classic/…
  • @David 分享一个重现上述行为的小提琴?
  • 我将尝试创建一个小提琴,当前我正在将数据附加到窗口对象。让我创建一个小提琴。因为不知道如何使用回调和所有。谢谢

标签: extjs extjs6 extjs6-classic


【解决方案1】:

success()someFunction() 中的窗口对象与Ext.widget 不同,将在这两个函数中创建一个单独的实例。所以数据不会被持久化。要持久化数据,您可以使用configviewModel

我已根据您的方案创建了一个示例代码,以使用配置在窗口关闭时保留数据,该配置对特定视图及其控制器具有全局性。

Ext.application({
    name : 'Fiddle',

    launch : function() {
        Ext.create("Ext.form.Panel",{
            renderTo: Ext.getBody(),
            config: {
                win: Ext.widget('window'), //if we store window, on close we loose it
                data: "" //it will persist, so this can be used
            },
            items: [
                {
                    xtype: 'button',
                    text: 'call',
                    handler: function(){
                        var me = this;
                        Ext.Ajax.request({
                         url: 'data1.json',

                            success: function(response, opts) {
                                var data = Ext.decode(response.responseText);
                                var window = me.up().config.win;
                                me.up().config.data = data;
                                window.data = data;
                                window.show();
                            },

                            failure: function(response, opts) {
                              console.log('server-side failure with status code ' + response.status);
                            }
                        });
                    }
                }, {
                    xtype: 'button',
                    text: 'Get Value',
                    handler: function(){
                       console.log(this.up().config.win.data);
                       console.log(this.up().config.data);
                    }
                }
            ]
        });
    }
});

这里第一个按钮的处理程序将代表您的 ajax 调用success,第二个按钮的处理程序代表您的someFunction

这里我保留了两个配置,win 和 data。 win 是一个窗口对象,将在关闭时销毁,因此我们无法使用它。其次是数据,它是一个普通变量,除非各自的视图被破坏,否则它将被持久化。所以你可以使用第二个配置。

你可以找到工作小提琴here

【讨论】:

  • 其实我也做过同样的事情。让我们再等几个小时,如果没有人出现我会接受这个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-29
  • 1970-01-01
  • 2019-09-22
  • 2013-01-03
  • 1970-01-01
  • 2016-10-21
相关资源
最近更新 更多