2011-11-15 16 views
8

Estoy tratando de cargar datos 'anidados' en una relación hasMany en ExtJS4. Mi modelo es el siguiente:Cargando hasMany datos en ExtJS

Ext.define("Entrypage.model.Entrypage",{ 
    extend: "Ext.data.Model", 
    fields: ['id','title','urlkey','text','picture','keywords', 'searchterms','description','critriamodus'], 
    hasMany: {model: 'EntrypageCriterium',name:'brands'}, 
    proxy: { 
     type: 'ajax', 
     url: '/Admin/extjson/entrypages', 
     reader: {type:'json', root:'entrypages'} 
    } 
}); 

Y EntrypageCriterium:

Ext.define("Entrypage.model.EntrypageCriterium",{ 
    extend: "Ext.data.Model", 
    fields: ['id','type','title'] 
}); 

cargo mis datos de este modo:

Entrypage.load("nikon-coolpix",{success:function(record,options,success){ 
console.log(record); 
}}); 

Se carga bien. JSON vuelve este:

{ 
    "success": true,   
"entrypages":[{ 
    "id":"1", 
    "urlkey":"nikon-coolpix", 
    "title":"Nikon Coolpix", 
    "text":"Some blahblah about Nikon", 
    "keywords":"nikon,coolpix,digitale,camera", 
    "description":"Nikon Coolpix camera's", 
    "picture":"Nikon Coolpix camera's", 
    "searchterms":"nikon coolpix", 
    "language":"nl", 
    "brands":[ 
     {"id":27038,"title":"Nikon","type":"brand"} 
    ] 
}] 
} 

Pero cuando intento record.brands() ni nada de eso. Dice que no existe tal método. Creo que algo va mal al mapear los datos en el modelo.

¡Cualquier ayuda sería muy apreciada!

Respuesta

17

encontrado por fin el problema. Para cualquier consulta: el

Si está utilizando paquetes en la nueva estructura MVC de ExtJS, defina la ruta completa a la clase vinculada en la asociación de este modo:

hasMany: {model: 'Entrypage.model.EntrypageCriterium', name: 'brands', associationKey:'brands'} 
+0

Gracias. He averiguado la misma situación yo mismo, pero fue difícil de hacer. –

+0

¿Era la solución lo que hacía que el modelo fuera totalmente calificado? o fue la solución realmente agregando la associationKey? – tommyO

3

Debe establecer la propiedad associationKey en la asociación hasMany, para que sepa qué propiedad json usar.

hasMany: {model: 'EntrypageCriterium',name:'brands', associationKey:'brands'} 

ver la sección de carga de datos anidado aquí:

http://docs.sencha.com/ext-js/4-0/#!/api/Ext.data.reader.Reader

+0

Lo sentimos, no funcionó. Pero, ¿no haría eso que funcione el método de las "marcas", pero devuelva una lista vacía? –

+0

Olvidé el espacio de nombres en su modelo. Su foreignKey también estará mal ahora, pero no es necesario que lo use en este caso. –