2013-11-07 3 views
2

в моем приложении ExtJS. Я хочу сбросить настройки при изменении страницы. Это означает, что я не хочу, чтобы какие-либо фильтры, группы или слушатели были на любом старом представлении/странице.ExtJS 4.2.1 сброс магазинов в ViewChange

Currentyl я устанавливаю магазин мой взгляд, как это:

{ 
    xtype: 'admingrid', 
    ... 
    columns: [ 
     ... 
    ], 
    store: 'appname.store.administration.User' 
} 

Я загрузки магазина так:

onAfterRender: function() { 
    //load all users 
    this.setUserStore(this.getUserGrid().getStore()); 
    this.getUserStore().load(); 
}, 

, а в некоторых случаях, как это:

onAfterRender: function() { 
    //load all users 
    this.setUserStore(Ext.StoreManager.lookup('appname.store.administration.User')); 
    this.getUserStore().load(); 
}, 

все мои мои страницы расширяют мой базовый вид, поэтому я подумал, что просто делаю что-то вроде этого:

Ext.define("appname.view.Base", { 
    extend: 'Ext.panel.Panel', 
    ui: 'basepanel', 

    padding: 15, 
    contentPaddingProperty: 'padding', 

    listeners: { 
     beforedestroy: function() { 
      Ext.StoreManager.each(function (item, index, len) { 
       item.clearFilter(true); // param: suppressEvent 
       item.clearGrouping(); 
       item.clearListeners(); // this will also remove managed listeners         
      }); 
     } 
    } 
}); 

это приведет к тому, что сетка иногда пуста, когда я впервые вхожу в представление ... Я не понимаю, почему .. когда я вхожу в представление второго или иногда в третий раз показывает сетку с записями.

Есть ли общий способ совершить такую ​​вещь? Что я делаю неправильно? Я не понимаю, почему это происходит.

ответ

0

Просто очистите магазин, если он присутствует в вашем событии afterrender. Таким образом, вы снова будете использовать магазин и просто очистите его.

Итак, в вашем afterrender используйте StoreManager для поиска в магазине. Если его настоящее, оно было создано раньше, и вы можете его очистить.

var store = Ext.StoreManager.lookup('storeid'); 
if(store) { 
    store.clearFilter(true); 
    store.clearGrouping(); 
} 

Это очистит магазин, если он присутствует.

+0

Я думаю, что он не должен что-то делать с моим событием .. если я удалю событие clearListeners(), все тоже отлично работает .. но что, если у меня есть некоторые события «beforeload» в моем магазине, и я тоже хочу их очистить .. не зная, какой регистратор событий зарегистрирован. – JuHwon

Смежные вопросы