此代码块有效:
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'
}
});
以下是出现问题的地方:
我做错了吗?
答案 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.Store
和Ext.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自动加载。