ExtJS 4.1 - 检索嵌套JSON的hasOne信息

时间:2012-08-31 16:41:48

标签: javascript extjs4.1

我正在尝试检索Model和包含hasOne关联的关联模型的信息。我引用了以下Sencha文档页面(http://docs.sencha.com/ext-js/4-1/#!/guide/data)。我目前有以下示例代码:

var Mtd = Ext.ModelMgr.getModel('Mtd');
 Mtd.load(4, {
     success: function(mtd){
         console.log("Loaded! " + mtd.get('id'));
         mtd.getTreatmentdesign(function(treatment,operation){
             console.log(treatment.get('id'));
         }, this);
     }
 });

现在,当我调用mtd.getTreatmentdesign()时,我注意到有两个请求来检索信息。第一个是检索我期望的Mtd信息,但是它也要求检索Treatmentdesign信息。 Mtd的响应包含Mtd信息以及Treatmentdesign信息。所以我想用一个请求来处理Mtd和Treatmentdesign信息。令我困惑的是,文件说明如下:

  

您可能想知道为什么我们将成功函数传递给User.load调用,但在访问用户的帖子和注释时不必这样做。这是因为上面的示例假设当我们发出获取用户的请求时,除了所有嵌套的帖子和注释之外,服务器还会返回用户数据。通过像上面那样设置关联,框架可以在单个请求中自动解析嵌套数据。

那么如何在不另外提出要求的情况下检索相关信息呢?我只是想从单个请求中使用所有json而不是必须发出多个请求。

2 个答案:

答案 0 :(得分:1)

请务必将HasOne关联的associationKey配置设置为包含相关模型数据的属性。默认情况下,这是所有小写字母的关联模型类的名称。

例如,如果服务器以

的形式返回Mtd记录的数据
{
    ...
    treatmentDesign: {
       ...
    }
}

associationKey设置为'treatmentDesign'

以下是一个实例:http://jsfiddle.net/HP6fq/3/

答案 1 :(得分:0)

是的,associationKey正常工作

Ext.define('User', {
    extend:'Ext.data.Model',
    fields: ['id', 'name', 'status'],
    associations: [{ type: 'hasOne', model: 'Status', associationKey: 'status'  }]
});

Ext.define('Status', {
    extend:'Ext.data.Model',
    fields: ['id', 'title'],
});

Demo here