2011-11-15 20 views
8

Sto provando a caricare i dati "annidati" in una relazione hasMany in ExtJS4. Il mio modello è simile al seguente:Caricamento hasMany data in 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'} 
    } 
}); 

E EntrypageCriterium:

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

a caricare i miei dati in questo modo:

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

Si carica bene. JSON restituisce questo:

{ 
    "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"} 
    ] 
}] 
} 

Ma quando provo record.brands() o qualcosa di simile. Dice che non esiste un tale metodo. Penso che qualcosa stia andando male nel mappare i dati nel modello.

Qualsiasi aiuto sarebbe molto apprezzato!

risposta

17

finalmente trovato il problema. Per qualsiasi riferimento futuro:

Se stai usando i pacchetti nella nuova struttura MVC di ExtJS, definire il percorso completo della classe collegato in vostra associazione in questo modo:

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

Grazie. Ho capito da solo la stessa situazione ma era difficile da fare. –

+0

La correzione ha reso il modello pienamente qualificato? o la correzione stava effettivamente aggiungendo la chiave di associazione? – tommyO

3

È necessario impostare la proprietà associationKey nell'associazione hasMany, in modo che sappia quale proprietà json utilizzare.

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

vedere la sezione Dati Caricamento nidificato:

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

+0

Siamo spiacenti, non ha funzionato. Ma questo non farebbe funzionare il metodo 'brands', ma restituire una lista vuota? –

+0

Ho dimenticato lo spazio dei nomi sul modello. Anche la tua foreignKey sarà sbagliata, ma in questo caso non è necessario utilizzarla. –

Problemi correlati