在我们的应用程序中,我们有很多名称/值存储,它们是在加载时创建的,并且像这样放入 JSONStore :
Ext.create("Ext.data.JsonStore", {
data: data,
model: 'EM.model.controlUnit.CodeList',
storeId: "cl_" + tableId,
sorters: [{
sorterFn: aSorterFunction
}],
});
该模型非常简单,如下所示:
Ext.define('EM.model.controlUnit.CodeList', {
extend: 'Ext.data.Model',
fields: [{
name: 'value', type: 'int'
}, {
name: 'label', type: 'string'
}, {
name: 'description', type: 'string'
}]
});
我认为商店是可以互换的,所以我决定在组合中使用商店(没有特殊的组合商店所以我认为JSONStore必须和 SimpleStore 一样好)。我这样得到了商店:
var msDataStore = Ext.getStore("cl_t_cl_maritalstatus");
并像这样使用商店:
{
xtype: 'combo',
fieldLabel: 'Marital Status',
displayField: "label",
valueField: "value",
store: msDataStore
}
当我运行应用程序时,组合充满了商店中的值,但是,当我弹出组合框时,会抛出此错误:
ext-debug-w-comments.js:9951 Uncaught Ext.data.proxy.Server.buildUrl():你正在使用ServerProxy但是 没有提供网址。
我不想要任何服务器代理。这些是简单的本地存储的名称值集合。
答案 0 :(得分:3)
此问题与“代理”属性有关。 JsonStore的默认代理是'ajax';
proxy: { type : 'ajax', reader: 'json', writer: 'json' }
你应该用'memory'覆盖;
proxy: { type: 'memory' }
你的最终商店是;
Ext.create("Ext.data.JsonStore", {
data: data,
model: 'EM.model.controlUnit.CodeList',
storeId: "cl_" + tableId,
proxy: {
type: 'memory'
}
sorters: [{
sorterFn: aSorterFunction
}],
});
答案 1 :(得分:2)
没有URL的JsonStore
是完全可以接受的,但是您必须确保在单击下拉列表时组合不会触发加载操作。这是通过在组合定义中添加配置选项queryMode:'local'
:
{
xtype: 'combo',
fieldLabel: 'Marital Status',
displayField: "label",
valueField: "value",
queryMode: 'local',
store: msDataStore
}