¿Cómo puedo hacer que una asociación de modelo Ext JS 4 use una tienda existente en lugar de crear la suya propia?

Tengo los siguientes modelos configurados (simplificados):

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

Ya tengo cargadas las tiendas existentes para cada uno de estos modelos, con muchos datos asociados. Cuando intento acceder al UserGroup asociación de User, No obtengo ningún dato.

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

Sé que esto se debe a que la asociación está creando su propia tienda. Hasta ahora, solo puedo obtener los datos asociados apropiadamente por

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

que hace una llamada al servidor para obtener esa información, pero luego tengo que usar una devolución de llamada y esperar una respuesta.

Entonces, ¿cómo puedo especificar una tienda para userGroups asociación a utilizar para que no solicite datos del servidor?

preguntado el 08 de noviembre de 11 a las 15:11

1 Respuestas

Afaik, hay dos posibles soluciones:

  1. Anular Ext.data.HasManyAssociation.createStore.
  2. Pasar los datos de la tienda original a Ext.data.HasManyAssociation.storeConfig:

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

respondido 09 nov., 11:10

Impresionante, se ve fantástico. Espero intentarlo esta semana. ¡Gracias! - John Krull

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.