Загрузка hasMany данных в ExtJS - PullRequest
9 голосов
/ 15 ноября 2011

Я пытаюсь загрузить «вложенные» данные в соотношении hasMany в ExtJS4. Моя модель выглядит так:

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

А EntrypageCriterium:

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

Я загружаю свои данные так:

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

Хорошо загружается. Json возвращает это:

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

Но когда я пытаюсь record.brands() или что-нибудь в этом роде. Это говорит, что такой метод не существует. Я думаю, что что-то идет не так при отображении данных в модели.

Любая помощница будет очень признательна!

Ответы [ 2 ]

17 голосов
/ 16 ноября 2011

Наконец-то нашел проблему. Для дальнейшего использования:

Если вы используете пакеты в новой структуре MVC ExtJS, определите полный путь к связанному классу в вашей ассоциации следующим образом:

hasMany: {model: 'Entrypage.model.EntrypageCriterium', name: 'brands', associationKey:'brands'}
3 голосов
/ 16 ноября 2011

Вам необходимо установить свойство associationKey в ассоциации hasMany, чтобы он знал, какое свойство json использовать.

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

см. Раздел «Загрузка вложенных данных» здесь:

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

...