2012-08-31 18 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