如何在ExtJS3中设置ArrayStore的Id字段(以便可以通过该字段的值查找记录)

如何在ExtJS3中设置ArrayStore的Id字段(以便可以通过该字段的值查找记录),extjs,extjs-stores,Extjs,Extjs Stores,我在Ext.data.ArrayStore上遇到问题。我有一个这样的定义: var store = new Ext.data.ArrayStore({ fields: [ 'myIdField', 'myDataField' ], idProperty: 'myIdField' }); store.add(new store.recordType({ myIdField: 'a', myDataField: '

我在Ext.data.ArrayStore上遇到问题。我有一个这样的定义:

var store = new Ext.data.ArrayStore({
    fields: [
        'myIdField',
        'myDataField'      
    ],
    idProperty: 'myIdField'
});

store.add(new store.recordType({
    myIdField: 'a',
    myDataField: 'SomeData'
}));
然而,当我

var myInsertedRecord = store.getById('a');
myInsertedRecord的值为“未定义”

我是否误解了记录id的设置是如何工作的?

没有
idProperty
。 尝试创建模型,在模型中指定
idProperty
。使用该模型创建您的商店

例如:

Ext.define('MyData', {
    extend: 'Ext.data.Model',
    fields: ['myIdField', 'myDataField'],
    idProperty: 'myIdField'
});


var store = Ext.create('Ext.data.ArrayStore', {
    model: 'MyData'
});

store.add({
    myIdField: 'a',
    myDataField: 'SomeData'
});


var myRecord = store.getById('a');

我知道这是一个旧线程,但我会回答它无论如何

问题在于您创建要添加到存储的新记录的方式。看看这个函数。您将看到它可以接受一个可选的ID参数

因此,要使上述示例起作用,您需要将记录添加到存储中,如下所示:

store.add(new store.recordType({
    myIdField: 'a',
    myDataField: 'SomeData'}, 'a'));
请注意最后一个“a”,这是将ID应用于记录的位置


之后,您添加的记录将有一个ID,因此
存储。getById('a')
将适用于您。

不幸的是,我正在使用的应用程序使用ExtJS 3,因此创建模型不是一个选项:(