Как я могу заставить ассоциацию модели Ext JS 4 использовать существующее хранилище, а не создавать свое собственное?

#javascript #extjs #model #extjs4

#javascript #extjs #Модель #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
  

Я знаю, это потому, что assocation создает свое собственное хранилище. Пока я могу получить соответствующие данные только с помощью

 Ext.getStore('User').getAt(12).userGroups().load();
  

который вызывает сервер для получения этой информации, но затем я должен использовать обратный вызов и ждать ответа.

Итак, как я могу указать хранилище для userGroups ассоциации, которое будет использоваться, чтобы оно не запрашивало данные с сервера?

Ответ №1:

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()
            },
            // ...
        }]
    });
      

Комментарии:

1. Потрясающе, это выглядит фантастически. Я надеюсь попробовать это на этой неделе. Спасибо!