无法在控制器中侦听加载事件

时间:2015-06-10 07:18:59

标签: extjs model-view-controller

我在stackoverflow(thisthis)扫描了很多线程,但没有一个帮我解决问题。所以,我有一个像这样定义的商店:

Ext.define('fileseditor.store.fileseditorNavigStore',{
    extend:'Ext.data.TreeStore',
    ...

我已经听说过吸气剂,并试图在我的控制器中执行此操作:

init: function(){
    this.getfileseditorNavigStoreStore().addListener('load', this.finishedLoading, this);

但这会导致错误this.getfileseditorNavigStoreStore is not a function

2 个答案:

答案 0 :(得分:1)

这样做:

http://docs.sencha.com/extjs/4.2.3/#!/api/Ext.app.Controller-cfg-stores

写下你自己的吸气剂:

 Ext.define("MyApp.controller.Foo", {
     extend: "Ext.app.Controller",

     requires: [
         'MyApp.store.Users',
         'MyApp.store.Vehicles'
     ]

     getUsersStore: function() {
         return this.getStore("Users");
     },

     getVehiclesStore: function() {
         return this.getStore("Vehicles");
     }
 });

或更短

Ext.define("MyApp.controller.Foo", {
     extend: "Ext.app.Controller",
     stores: ['Users', 'Vehicles']
 });

=>你可以使用de storeId或fullName(fileseditor.store.fileseditorNavigStore)

更新

监听控制器中事件的另一种方法是:

http://docs.sencha.com/extjs/4.2.3/#!/api/Ext.app.Controller-method-listen

收听"加载" Store使用storeId =" myStoreId":

触发的事件
 Ext.define('AM.controller.Users', {
     init: function() {
         this.listen({
             store: {
                 '#myStoreId': {
                     load: this.onMyStoreLoad
                 }
             }
         });
     },
     ...
 });

Btw:按照惯例,顶级命名空间和实际的类名应该在CamelCased中,其他一切都应该是低级的。所以FilesEditor.store.FilesEditorNaviagStore

答案 1 :(得分:1)

 var me = this;
 var filesEditorStore = Ext.create( 'fileseditor.store.fileseditorNavigStore' , {
        storeId : 'fileseditor'
    } );

  filesEditorStore.on( 'load' , function ( store , records , successful , eOpts ) {
        if ( successful ) { 
            me.finishedLoading();
        }
    } );