下面我试图根据为该字段(列)值存储的值,在我的数据存储中检索网格中的类别字段的特定类别记录。 “categoryId”的值返回“2”。为什么findRecord没有返回记录?它显示“-1”表示“类别”。当我将它用作组合框商店的表格中的下拉列表时,存在key = 2的记录。我最终想找到key = 2的记录,然后返回value属性,因此它在我的网格视图中显示该记录的value属性。
仅供参考:“key”属性是类别记录的id,“value”属性是我想要显示(或在网格单元格中呈现)的类别记录的名称。
类别商店:
Ext.define('DropdownOption', {
extend: 'Ext.data.Model',
fields: [
{ name: 'key' },
{ name: 'value' }
]
});
var statusDropdownStore = new Ext.data.Store({
proxy: new Ext.ux.AspWebAjaxProxy({
url: '/track/Controls/Shared/GeneralService.asmx/GetDropdownOptions',
actionMethods: {
read: 'POST'
},
extraParams: {
user_login: authUser,
table_name: '[status]'
},
reader: {
type: 'json',
model: 'DropdownOption',
root: 'd'
},
headers: {
'Content-Type': 'application/json; charset=utf-8'
}
})
});
查看(Ext.grid.Panel)列:
columns: [
... snip ...
{ text: 'Status', dataIndex: 'status', sortable: true,
renderer: function(value, metaData, record, row, col, store, gridView) {
var categoryId = record.get('status');
alert("categoryId: " + categoryId); // displays "categoryId: 2"
if (categoryId > 0)
{
var category = statusDropdownStore.findRecord('key', categoryId);
alert("category: " + category); // displays "category: -1" which usually means not found
//alert(category.get('value'));
return ''; // return value property of category record
}
else
{
return '';
}
}
},
{ text: 'Date Modified', dataIndex: 'date_modified', sortable: true, renderer: Ext.util.Format.dateRenderer('m/d/Y') },
... snip ...
],
====================
好的,网格初始加载时的值为空(意味着它命中了“return'';”代码行。但是当我进入记录并单击“保存”时,网格中的所有行都显示类别名称 - 使用下面的新代码。作为旁注,我曾经有一个名为“key”的id列,但我将其重命名为“id”。
{ text: 'Status', dataIndex: 'status', sortable: true,
renderer: function(value) { //, metaData, record, row, col, store, gridView) {
if (value > 0) {
var r = statusDropdownStore.findRecord('id', value);
if (r != null)
{
var catName = r.get('value');
return catName;
}
}
return '';
}
},
答案 0 :(得分:3)
你的代码看起来很完美,我对渲染器做了同样的事情:
renderer: function(value) {
if (value) {
var record = refStore.findRecord('id', value),
name = record.get('name');
return name;
}
},
奇怪的是findRecord
如果找不到则会返回null
,而不是-1。
我唯一能想到的就是from the docs:
过滤商店时,只在过滤器中查找记录。
以下是我用于refStore
的模型(上图):
Ext.define('MyApp.model.Reference', {
extend: 'Ext.data.Model',
fields: [
{name: 'id', type: 'int'},
{name: 'name', type: 'string'},
{name: 'active',type: 'bool'}
],
});
答案 1 :(得分:0)
查看findByREcord的原型
findRecord: function(fieldName, value, startIndex, anyMatch, caseSensitive, exactMatch) {
var index = -1;
if(fieldName && (value || value === 0)) {
var options = Ext.applyIf({
property: fieldName,
value: value,
anyMatch: anyMatch,
caseSensitive: caseSensitive,
exactMatch: exactMatch,
root: 'data'
}, {
anyMatch: false,
caseSensitive: false,
exactMatch: true
});
var filter = Ext.create('Ext.util.Filter', options);
index = this.data.findIndexBy(filter.getFilterFn(), null, startIndex);
}
return index > -1 ? this.getAt(index) : null;
}
使用true作为最后一个参数,它将解决您的问题。