【问题标题】:How to set the Id field of an ArrayStore (So that records can be looked up by the value of that field) in ExtJS 3如何在 ExtJS 3 中设置 ArrayStore 的 Id 字段(以便可以通过该字段的值查找记录)
【发布时间】:2015-04-28 20:05:12
【问题描述】:

我在使用 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 的设置是如何工作的?

【问题讨论】:

    标签: extjs extjs-stores


    【解决方案1】:

    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');
    

    【讨论】:

    • 不幸的是,我正在开发的应用程序使用 ExtJS 3,所以创建模型不是一种选择:(
    【解决方案2】:

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

    问题在于您创建新记录以添加到商店的方式。看看Ext.data.Record-static-method-create 函数。你会看到它可以带一个可选的 ID 参数。

    因此,要使上述示例正常工作,您需要像这样将记录添加到商店:

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

    注意最后一个“a”,这是您将 ID 应用于记录的位置。

    之后,您添加的记录将有一个 ID,因此 store.getById('a') 将为您工作。

    【讨论】:

      猜你喜欢
      • 2016-04-07
      • 2018-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多