如何使Ext JS 4模型关联使用现有的商店而不是创建自己的商店呢?

时间:2011-11-08 15:58:07

标签: javascript extjs model extjs4

我设置了以下模型(简化):

Ext.define('UserGroup', {
    extend: 'Ext.data.Model',
    fields: ['GroupID', 'UserID'],
    idProperty: '',
    associations: [{
        type: 'belongsTo',
        model: 'User',
        primaryKey: 'UserID',
        foreignKey: 'UserID',
        name: 'users'
    }]
)};

Ext.define('User', {
    extend: 'Ext.data.Model',
    idProperty: 'UserID',
    associations: [{
        type: 'hasMany',
        model: 'UserGroup',
        primaryKey: 'UserID',
        foreignKey: 'UserID',
        name: 'userGroups'
    }]
});

我已经为每个模型加载了现有的商店,并提供了大量相关数据。 当我尝试从UserGroup访问User关联时,我没有收到任何数据。

Ext.getStore('User').getAt(12).userGroups().count(); // returns 0

我知道这是因为关联正在创建自己的商店。到目前为止,我只能通过

获得相应的相关数据
Ext.getStore('User').getAt(12).userGroups().load();

调用服务器获取该信息,但后来我必须使用回调并等待响应。

那么,如何指定userGroups关联使用的商店,以便它不会从服务器请求数据?

1 个答案:

答案 0 :(得分:3)

Afaik,有两种可能的解决方案:

  1. 覆盖Ext.data.HasManyAssociation.createStore
  2. 将数据从原始商店传递到Ext.data.HasManyAssociation.storeConfig

    Ext.define('User', {
        extend: 'Ext.data.Model',
        idProperty: 'UserID',
        associations: [{
            type: 'hasMany',
            storeConfig: {
              data: originalStore.getRange()
            },
            // ...
        }]
    });