Extjs success вызывается дважды, и, следовательно, событие изменения также привязывается дважды

#extjs

#extjs

Вопрос:

 Ext.define('js.custom.filterbar',{
    extend: 'Ext.Component',
    alias: 'widget.FilterBar',
    onRender: function(){
        alert("in onrender filterbar");
        var me =this;
        me.callParent(arguments);
        me.el.load({
            url: '/TRIFOLD/jsp/filterBar.jsp',
            failure: function (response) {
                alert("fail");
            },
            success: function(response){
                Ext.Function.defer(me.addStoreListeners, 50);
            }
            });
         },
        addStoreListeners : function(){
            Ext.get('store').on({
                change: function(){
                    alert("change");
                    var floorplanObj = Ext.create('js.custom.floorplan');
                    floorplanObj.getRequestParameters();
                }
            });
        }
    });
  

В приведенном выше коде успех el.загрузка запускается дважды, и, следовательно, мои слушатели также привязываются дважды. Таким образом, при изменении окна со списком предупреждение («изменение») приходит дважды. Пожалуйста, скажите, что я делаю не так.

Комментарии:

1. Пожалуйста, используйте тег code для форматирования вашего кода в удобочитаемом виде. Никто не собирается разбираться в этом беспорядке 😉

2. Зачем вам нужно добавлять слушателей таким образом? Вы используете ExtJs3 или 4? пожалуйста, отметьте

3. Я использую Extjs 4. но следует отметить, что success вызывается дважды. Как остановить его от запуска дважды?

Ответ №1:

У меня возникла та же проблема — хотя у меня нет решения типа patch, которое вы могли бы применить к классам Ext, у меня есть (хакерское) решение, которое работает для меня (ExtJS 4.0.7, кстати)

 Ext.get('someEl').load({
    url: '/some/content.php',
    success: function (resultOrEvent){
        if(resultOrEvent.hasOwnProperty('request'))
        {
           // Do your post-load stuff here
        }
    }
});
  

Я понятия не имею, почему это срабатывает дважды, но это было довольно раздражающе. То, что я вижу в консоли для ‘resultOrEvent’, именно это — в первый раз, когда я получаю ожидаемый объект запроса обратно, во второй раз, когда я получаю объект типа Ext.ElementLoader

Я ищу исправление для этого (если это проблема), и я обязательно отправлю ответ, если найду его.