5

此代码块有效:

Ext.define('MyApp.store.MyJsonStore', {
    extend: 'Ext.data.Store',
    fields: ['fieldName'],
    proxy: {
        type: 'ajax',
        url: 'json.php',
        reader: 'json'
    }
});

这一个崩溃:

Ext.define('MyApp.store.MyJsonStore', {
    extend: 'Ext.data.JsonStore',
    fields: ['fieldName'],
    proxy: {
        type: 'ajax',
        url: 'json.php',
        reader: 'json'
    }
});

这是发生问题的地方:

在此处输入图像描述

难道我做错了什么?

4

2 回答 2

4

JsonStore在 ExtJs 库中有点像红色区域...

如果您查看JsonStore的来源,您会看到:

constructor: function(config) {
    config = Ext.apply({
        proxy: {
            type  : 'ajax',
            reader: 'json',
            writer: 'json'
        }
    }, config);
    this.callParent([config]);
}

实际上,商店会覆盖您自己的配置。

老实说,我很难想象你为什么更JsonStore喜欢Ext.data.Store. 从设计的角度来看,Json 更像是一种阅读器——存储只是存储记录。

我只在我的应用程序中使用Ext.data.StoreExt.data.TreeStore

于 2013-01-17T17:49:30.447 回答
1

我在带有 JsonP 存储的 Ext JS 4.2.1 中遇到了类似的问题,这是由于未在初始存储配置中设置 URL 而引起的。我在加载过程中动态地创建了 URL:

myStore.load({ url: 'json.php' });

这导致它成功加载了传递的 URL,但我也得到了与您完全相同的错误和堆栈跟踪,并且数据从未真正显示(我只能通过 Chrome 开发人员工具看到它)。我通过使用以下代码解决了这个问题:

myStore.proxy.url = 'json.php';
myStore.load();

我知道我们做的事情并不完全相同,但是我们得到的错误是相同的,所以希望这至少可以为您指明正确的方向。

更新

事实证明,问题实际上源于自动加载其值的 ComboBox。当我点击它时,它会尝试重新加载值,即使我第一次通过在 load({ }) 调用中传递 URL 成功加载了它们,它使用的是它自己的使用代理的加载方法URL(未定义)。这就是设置代理 URL 停止错误的原因。

对我来说真正的解决方案是通过将queryMode配置设置为local.

于 2013-06-12T16:50:53.490 回答