向Ext.js创建存储添加侦听器会引发错误

时间:2014-08-15 15:43:10

标签: javascript extjs store listeners

我正在使用Ext.js尝试用商店填充手风琴面板。

以下是一段代码:

var store = Ext.create('Ext.data.Store', {
                model: jobStatusModel,
                storeId: jobStatusDescription,
                sortOnLoad: true,
                proxy: {
                    type: 'ajax',
                    url: 'http://server/JobScheduler/Service.svc/JobScheduler/Jobs/' + jobStatusDescription,
                    reader: {
                        type: 'json'
                    }
                },
                autoLoad: true,
                listeners: {
                    load: fillItemsAndSetPanelTitle
                }
            });

这嵌入在为每个“作业状态”运行的循环中。

在这个循环之外,我有fillItemsAndSetPanelTitle函数。

每当我从create store中删除“listeners”时,它运行正常。但除此之外,我得到了错误:

Uncaught TypeError: Cannot read property 'fn' of undefined 

知道我在这里做错了吗?

编辑:我发现它抱怨,因为我“手动”调用我的主要功能。

以前,它使用:

  this.control({
        "#MainMenuPanel": {
            render: this.onMainMenuPanelRender
        }
    });

我想在调用onMainMenuPanelRender之前等待我的商店加载,但是在等待所有商店加载的函数中添加"this.control"调用似乎不起作用,所以我称之为“手动”(this.onMainMenuPanelRender())

所以我想我现在的问题是:如何在初始“init”函数之外调用"this.control"

1 个答案:

答案 0 :(得分:0)

为什么要在controller.init之外调用this.control?它只是设置控制器。在其他地方没有意义。我认为你的方向是错误的。

此外,建议使用Ext.define在应用程序加载时定义商店。同时使函数fillItemsAndSetPanelTitle成为控制器的一个成员。我不知道'填写物品'但是,如果您使用网格面板显示商店,网格将在商店加载时自动填充。

我在您的代码中看到的另一个问题是,您在加载商店时,但在创建面板之前设置了面板标题。我认为正确的顺序是:加载商店,获取面板标题,直接使用正确的标题创建面板。

我建议您阅读有关ExtJs中MVC模式的文档。它会让你摆脱许多麻烦。