ExtJS 4.1.1a:JsonStore + proxy + url =“无法调用未定义的方法'indexOf'

时间:2013-01-17 17:23:15

标签: extjs4.1 jsonstore

此代码块有效:

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'
    }
});

以下是出现问题的地方:

enter image description here

我做错了吗?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

我在Ext JS 4.2.1中遇到类似的问题,因为没有在初始存储配置中设置URL而导致JsonP存储。我在加载期间创建了动态传递的URL:

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

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

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

我知道我们并没有做同样的事情,但我们得到的错误是相同的,所以希望这至少可以指出你正确的方向。

<强>更新

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

对我来说,真正的解决方案是通过将queryMode配置设置为local来阻止ComboBox自动加载。