ExtJs 4.2,存储加载事件中的网格中继事件导致未捕获类型错误:未定义不是函数

Ben*_*Ben 5 javascript grid extjs event-handling

这是上下文,我有一个可以由用户动态重新加载的网格。由于内容每次都不同,我想在网格的标题中添加网格中存在的元素数量。

为此,我想将该网格后面的商店的“加载”事件中继到网格本身。

我想我可以使用 Extjs relayEvents 函数,如此处所述

这是我的代码:

initComponent : function(){
    var me = this;
    me.relayEvents(this.getStore(), ['load'], 'store');
    me.callParent();
},
Run Code Online (Sandbox Code Playgroud)

由于我使用的是 MVC 架构,因此事件会在网格控制器中处理,如下所示:

init : function() {
    this.control({
        'genericGrid' : {
            storeload: this.setTitle
        }
    });

},

setTitle : function(grid){

    var total=grid.getStore().count();
    grid.setTitle('List ('+total+')');

},
Run Code Online (Sandbox Code Playgroud)

但是,当我启动应用程序时,我得到的只是空白页面和错误。

在 Chrome 下我得到:

未捕获的类型错误:未定义不是函数 ext-all-dev.js:17772

和火狐我得到:

类型错误:item.on 不是函数 ext-all-dev.js:17772

在Chrome上探索stackTrace,我发现错误来自relayEvents方法。

有人可以告诉我我做错了什么,或者也许有其他方法可以做到这一点?

小智 5

me.callParent在您的 initComponet 函数中交换和的顺序me.relayEvents。在 callParent 之后,应该创建 store,然后 getStore() 应该返回 store 实例。

initComponent : function(){
  var me = this;
  me.callParent();
  me.relayEvents(this.getStore(), ['load'], 'store');
},
Run Code Online (Sandbox Code Playgroud)