Как вывести данные из окна на главный экран

При успешном вызове Ajax я получаю открытие окна и ответ, который я прикрепляю к окну. Вот мой код.

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

Теперь я делаю некоторые манипуляции, и все обработанные данные доступны в объекте окна. После сохранения я закрываю окно. На Parent, когда я пытаюсь получить такой доступ, я не получаю никакой ценности. Как с этим бороться.

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

person David    schedule 13.09.2019    source источник
comment
Вам нужно думать немного более асинхронно. window.data запускается сразу после вызова окна, то есть до изменения данных. Рассмотрите возможность добавления функции обратного вызова или какого-либо обработчика, чтобы вы знали, когда окно было закрыто, и данные можно было добавить в переменную.   -  person Laurens    schedule 13.09.2019
comment
Спасибо за идею @Laurens любую ссылку, как я могу использовать обратный вызов.   -  person David    schedule 13.09.2019
comment
я предполагаю, что по умолчанию closeAction окна уничтожена, установите его, чтобы скрыть, и он должен работать - документы здесь: docs.sencha.com/extjs/6.5.3/classic/   -  person hwsw    schedule 15.09.2019
comment
@David делится скрипкой, воспроизводящей упомянутое поведение?   -  person Super Man    schedule 16.09.2019
comment
@JD Я пытаюсь создать скрипача, но это сложно. У вас есть идеи, как мы можем получить значение из окна на главный экран, когда окно закрыто.   -  person David    schedule 16.09.2019
comment
есть несколько способов сохранить данные, я хотел увидеть код, чтобы рассказать вам, как вы можете его использовать. Кстати, с какой проблемой вы столкнулись при создании скрипки?   -  person Super Man    schedule 16.09.2019
comment
Я попытаюсь создать скрипку, в настоящее время я прикрепляю данные к объекту окна. Позвольте мне создать скрипку. Потому что не уверен, как использовать обратный звонок и все такое. Спасибо   -  person David    schedule 16.09.2019


Ответы (1)


Объект окна в success() и в someFunction() не совпадает, так как Ext.widget создаст отдельный экземпляр в обеих функциях. поэтому данные не будут сохраняться. Чтобы сохранить данные, вы можете использовать либо config, либо viewModel.

Я создал пример кода в соответствии с вашими сценариями для сохранения данных при закрытии окна с использованием конфигураций, которые действуют как глобальные для этого конкретного представления и его контроллера.

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 — это объект окна, который будет уничтожен при закрытии, поэтому мы не можем его использовать. во-вторых, это данные, которые являются обычной переменной, которая будет сохраняться до тех пор, пока соответствующее представление не будет уничтожено. так что вы можете использовать 2-й конфиг.

Вы можете найти работающую скрипту здесь.

person Super Man    schedule 16.09.2019
comment
На самом деле я сделал то же самое. Давайте подождем еще несколько часов. Если никто не появится, я приму это. - person David; 23.09.2019