【问题标题】:Adding a listener to the Ext.js create store is raising an error向 Ext.js 创建存储添加侦听器会引发错误
【发布时间】:2014-10-09 08:58:43
【问题描述】:

我正在使用 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 函数。

每当我从创建存储中删除“侦听器”时,它都运行良好。但否则,我会收到错误消息:

Uncaught TypeError: Cannot read property 'fn' of undefined 

知道我在这里做错了什么吗?

编辑:我发现它会抱怨,因为我正在“手动”调用我的主函数。

以前,它使用过:

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

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

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

【问题讨论】:

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

标签: javascript extjs store listeners


【解决方案1】:

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

此外,建议在应用程序加载时使用 Ext.define 来定义您的商店。同时使函数fillItemsAndSetPanelTitle 成为控制器的成员。我不知道“填充项目”是做什么的,但如果您使用网格面板来显示商店,那么当商店加载时,网格会自动填充。

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

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

【讨论】:

    猜你喜欢
    • 2012-08-29
    • 2020-09-16
    • 2014-01-30
    • 2015-05-04
    • 2017-08-30
    • 2010-11-26
    • 2014-02-08
    • 2017-04-06
    • 1970-01-01
    相关资源
    最近更新 更多