【问题标题】:Loading hasMany data in ExtJS在 ExtJS 中加载 hasMany 数据
【发布时间】:2023-04-09 10:58:02
【问题描述】:

我正在尝试在 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() 或类似的东西时。它说不存在这种方法。 我认为在模型中映射数据时出了点问题。

任何帮助将不胜感激!

【问题讨论】:

    标签: javascript json extjs extjs4


    【解决方案1】:

    终于找到问题了。供将来参考:

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

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

    【讨论】:

    • 谢谢。我自己也发现了同样的情况,但很难做到。
    • 修复是否使模型完全合格?还是修复实际上添加了关联键?
    • 谢谢,伙计们!对我来说,直到我在 Entrypage 类中添加 requires: ['Entrypage.model.EntrypageCriterium'] 之后,所有这些都不起作用
    【解决方案2】:

    你需要在hasMany关联中设置associationKey属性,这样它就知道使用哪个json属性了。

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

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

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

    【讨论】:

    • 对不起,没用。但这不会使brands 方法工作,但返回一个空列表?
    • 我忘记了您模型上的命名空间。你的 foreignKey 现在也会出错,但在这种情况下你不需要使用它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-23
    • 2021-10-20
    • 2011-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多