難以理解模型的「關聯」特性以及開發人員如何通過關聯訪問嵌套數據。如何訪問Extjs嵌套模型(從Xml加載)?
這是我們試圖解析的一個簡單的XML文件。
<?xml version="1.0" encoding="UTF-8"?>
<contacts>
<contact>
<id>1</id>
<name>Bob Jones</name>
<emails>
<email>
<addr>[email protected]</addr>
<display>B. Jones 1</display>
</email>
<email>
<addr>[email protected]</addr>
<display>B. Jones 2</display>
</email>
</emails>
</contact>
<contact>
<id>2</id>
<name>John Rodeo</name>
<emails>
<email>
<addr>[email protected]</addr>
<display>J. Rodeo 1</display>
</email>
<email>
<addr>[email protected]</addr>
<display>J. Rodeo 2</display>
</email>
</emails>
</contact>
</contacts>
而這裏的相關模型
Ext.define('MyApp.model.Contact', {
extend: 'Ext.data.Model',
uses: [
'MyApp.model.Emails'
],
fields: [
{
name: 'id'
},
{
name: 'name'
}
],
hasMany: {
model: 'MyApp.model.Emails',
autoLoad: true,
foreignKey: 'addr',
name: 'emailAddresses'
}
});
Ext.define('MyApp.model.Emails', {
extend: 'Ext.data.Model',
uses: [
'MyApp.model.Contact'
],
idProperty: 'addr',
fields: [
{
name: 'addr'
},
{
name: 'display'
}
],
belongsTo: {
model: 'MyApp.model.Contact'
}
});
最後,這裏的商店:
Ext.define('MyApp.store.MyXmlStore', {
extend: 'Ext.data.Store',
requires: [
'MyApp.model.Contact'
],
constructor: function(cfg) {
var me = this;
cfg = cfg || {};
me.callParent([Ext.apply({
autoLoad: true,
storeId: 'MyXmlStore',
model: 'MyApp.model.Contact',
proxy: {
type: 'ajax',
url: 'data/data.xml',
reader: {
type: 'xml',
record: 'contact'
}
}
}, cfg)]);
}
});
我們創建了一個簡單的網格,並將其鏈接到商店......和急, 它顯示的聯繫人(快速ascii渲染)
+---------------------------+
| My Grid Panel |
+-----+---------------------+
| Id | Name |
+-----+---------------------+
| 1 | Bob Jones |
| 2 | John Rodeo |
但是,我們完全喪失瞭如何檢索關聯電子郵件 記錄。
我讀過GridPanel可能無法正確呈現關聯的 數據。這對我們來說沒有問題 - 我們只是想方設法地使用這個模擬數據來編程式地訪問我們的 。
例如,假設我們想創建一個附加 商店簡單onXmlstoreLoad事件,我們想只是CONSOLE.LOG()加載 後的電子郵件地址 - 什麼是正確的語法?
我們試圖推薦的方法:
onXmlstoreLoad: function(store, records, successful, operation, options) {
console.log(store.emailAddresses.getAt(0));
}
但是這會導致一個未定義的參考。
我認識到它可能歸結爲我們錯誤地描述我們的模型,但我們已經嘗試了 許多不同的配置,並且無法確定問題 是否數據沒有進入商店...或者我們是否不能參考是句法正確的 。
感謝榮譽:) – 2013-07-02 03:42:10
同樣的問題,做得好... – 2015-08-14 22:20:31