在ExtJS中加载hasMany数据

时间:2011-11-15 09:55:42

标签: javascript json extjs extjs4

我正在尝试在ExtJS4中以hasMany关系加载'嵌套'数据。 我的模型看起来像这样:

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 个答案:

答案 0 :(得分:17)

终于找到了问题。未来任何参考:

如果您在ExtJS的新MVC结构中使用包,请在关联中定义链接类的完整路径,如下所示:

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

答案 1 :(得分:3)

您需要在hasMany关联中设置associationKey属性,因此它知道要使用哪个json属性。

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

请参阅此处的“加载嵌套数据”部分:

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