2012-08-31 17 views
1

我正在尝试检索模型和包含hasOne关联的关联模型的信息。我参考了以下Sencha文档页面(http://docs.sencha.com/ext-js/4-1/#!/guide/data)。我现在有下面的示例代码的工作:ExtJS 4.1 - 检索嵌套JSON的hasOne信息

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信息以及处理设计信息。所以我想用一个请求来处理Mtd和Treatmentdesign信息。我一直困惑不已,该文件指出:

你可能会奇怪,为什么我们通过一个成功的函数来调用User.load但没有这样做访问用户的文章和评论的时候。这是因为上面的例子假设当我们发出请求来获取用户时,除了所有的嵌套帖子和评论外,服务器还返回用户数据。通过如上所述建立关联,框架可以自动解析出单个请求中的嵌套数据。

那么如何检索相关信息而不必再提出其他请求呢?我只是想从一个请求中使用所有的json,而不是必须发出多个请求。

回答

1

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

举例来说,如果一个Mtd记录中的数据由服务器的形式返回

{ 
    ... 
    treatmentDesign: { 
     ... 
    } 
} 

设置associationKey'treatmentDesign'

下面是行动的例子:http://jsfiddle.net/HP6fq/3/

+0

+1为的jsfiddle演示 – Ilan

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