如何在数据存储中搜索特定记录?我尝试过find()和findBy(),但都返回-1。
var index = clientStore.find('ClientID', '37');
我有一个包含客户列表的组合框。我想要的是能够在该组合上设置默认值。我使用setValue正确设置了值,我甚至可以使用setRawValue设置显示值,但我似乎无法根据clientID查询数据存储区并获取要在setRawValue中使用的公司名称。
这有意义吗?
以下是针对以下问题的数据存储区代码(抱歉它不允许我将其粘贴在那里)
var frmClientStore = new Ext.data.Store({
id: 'frmClientStore',
proxy: new Ext.data.HttpProxy({
url: 'url here',
method: 'POST'
}),
reader: new Ext.data.JsonReader({
root: 'rows',
id: 'recordID'
},[
{name: 'recordID', type: 'int', mapping: 'recordID'},
{name: 'ClientID', type: 'int', mapping: 'clientID'},
{name: 'CompanyName', type: 'string', mapping: 'companyName'}
])
});
答案 0 :(得分:3)
您的配置存在一些问题。首先,读取的id
- 属性应该是idProperty
- 属性。商店的id
- 属性应为storeId
- 属性(不推荐使用id
)。然后,当您在代码中引用frmClientStore
时,您的变量称为clientStore
(可能是拼写错误)。
var frmClientStore = new Ext.data.Store({
storeId: 'frmClientStore',
proxy: new Ext.data.HttpProxy({
url: 'url here',
method: 'POST'
}),
reader: new Ext.data.JsonReader({
root: 'rows',
idProperty: 'recordID'
},[
{name: 'recordID', type: 'int', mapping: 'recordID'},
{name: 'ClientID', type: 'int', mapping: 'clientID'},
{name: 'CompanyName', type: 'string', mapping: 'companyName'}
])
});
最后:您确定,当您尝试从中检索记录时,您的商店已经加载了吗?
尝试
frmClientStore.load({
callback: function(rs) {
console.log(rs);
console.log(this.find('ClientID', '37'));
}
});
答案 1 :(得分:0)
您列出的方式应该是正确的。但是,我应该指出字段名称区分大小写。它也可能正在搜索字符串(如您所列)而不是数字(可能是您想要的)。
假设'ClientID
'是正确的字段名称,您应该尝试以下操作:
var index = clientStore.find('ClientID', 37);
修改强>
另外,我刚刚注意到有关JsonReader的内容。不应该更像这样:
//...
reader: new Ext.data.JsonReader({
root: 'rows',
id: 'recordID'
fields: [ //list fields here as part of the JsonReader
{name: 'recordID', type: 'int', mapping: 'recordID'},
{name: 'ClientID', type: 'int', mapping: 'clientID'},
{name: 'CompanyName', type: 'string', mapping: 'companyName'}
]
})