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

时间:2014-07-02 20:19:55

标签: 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: 'SomeData'
}));

但是,当我这样做时

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

myInsertedRecord的值为'undefined'。

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

2 个答案:

答案 0 :(得分:0)

http://docs.sencha.com/extjs/4.2.2/#!/api/Ext.data.ArrayStore没有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');

答案 1 :(得分:0)

我知道这是一个老话题,但无论如何我都会回答......

问题在于您创建要添加到商店的新记录的方式。看看Ext.data.Record-static-method-create功能。您将看到它可以采用可选的ID参数。

因此,为了使您的上述示例有效,您需要将记录添加到商店,如下所示:

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

注意最后一个'a',即将ID应用于记录的位置。

之后,您添加的记录会显示一个ID,因此store.getById('a')将对您有效。