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

ExtJS 4.1 - Retrieve hasOne information for Nested JSON

本文关键字:hasOne 信息 JSON 嵌套 检索 ExtJS      更新时间:2023-09-26

我正在尝试检索Model和包含hasOne关联的关联模型的信息。我参考了以下Sencha文档页面(http://docs.sencha.com/ext-js/4-1/#/指南/数据)。我目前有以下示例代码在工作:

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和Treatment设计信息。令我困惑的是,文件中说明了以下内容:

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

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

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

例如,如果服务器以的形式返回Mtd记录的数据

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

将CCD_ 3设置为CCD_。

下面是一个实际操作的示例:http://jsfiddle.net/HP6fq/3/

是的,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'],
});

此处演示