2012-05-30 53 views
1

我嘗試從我的服務器加載JSON回覆,該回復通過模型的加載函數嵌套屬性。但不知何故,只有我的嵌套屬性集的第一個條目被解析。ExtJS4:hasMany模型只加載第一個嵌套屬性

我試圖加載如下所示的JSON文件:

{ 
    "id" : "2", 
    "name" : "John", 
    "logins" : [ 
     { 
     "id" : "4", 
     "person_id" : "2", 
     "date" : "2012-01-18 01:00:06" 
     },{ 
     "id" : "9", 
     "person_id" : "2", 
     "date" : "2012-01-18 19:36:13" 
     },{ 
     "id" : "12", 
     "person_id" : "2", 
     "date" : "2012-01-19 00:12:32" 
     }] 
} 

和我有兩個模型,如下列:

Ext.define('MyAppName.model.Person', { 
    extend : 'Ext.data.Model', 
    config : { 
     idProperty : 'id', 
     fields : [{ 
        name : 'id', 
        type : 'int' 
       }, { 
        name : 'name', 
        type : 'string' 
       }], 
     hasMany : [{ 
       model: 'MyAppName.model.Login', 
       name: 'logins', 
       associationKey: 'logins' 
     }], 
     proxy : { 
      type : 'ajax', 
      url : '../index.php?format=json', 
      reader : { 
       type : 'json' 
      } 
     } 
    } 
}); 

Ext.define('MyAppName.model.Login', { 
    extend : 'Ext.data.Model', 
    config : { 
     fields : [{ 
        name : 'id', 
        type : 'int' 
       }, { 
        name : 'person_id', 
        type : 'int' 
       }, { 
        name : 'date', 
        type : 'date' 
       }], 
     belongsTo: [{ 
      model: 'MyAppName.model.Person', 
      associationKey: 'logins' 
     }] 
    } 
}); 

和我嘗試使用其數據通過

加載新人
MyAppName.model.Person.load(personId, {scope: ..., ..., success: function(record, operation) { -someFancyCode-} }) 

但是,我在成功函數中檢索的記錄現在只包含一個登錄數據集。我做錯了什麼?

謝謝! Nic

回答

1

好吧,首先,Model本身並不加載嵌套數據,至少不是很好,它有一些知道的問題,所以更好的選擇是創建一個商店並加載你的模型通過那家商店,這些東西線中:

Ext.define('MyAppName.model.Person', { 
    extend: 'Ext.data.Model', 
    idProperty: 'id', 
    fields: [{ 
     name: 'id', 
     type: 'int' 
    }, { 
     name: 'name', 
     type: 'string' 
    }], 
    hasMany: [{ 
     model: 'MyAppName.model.Login', 
     name: 'logins' 
    }], 
    proxy: { 
     type: 'memory', 
     reader: { 
      type: 'json' 
     } 
    } 
}); 

Ext.define('MyAppName.model.Login', { 
    extend: 'Ext.data.Model', 
    fields: [{ 
     name: 'id', 
     type: 'int' 
    }, { 
     name: 'person_id', 
     type: 'int' 
    }, { 
     name: 'date', 
     type: 'date' 
    }], 
    belongsTo: [{ 
     model: 'MyAppName.model.Person' 
    }] 
}); 
var data = { 
    "id": "2", 
    "name": "John", 
    "logins": [{ 
     "id": "4", 
     "person_id": "2", 
     "date": "2012-01-18 01:00:06" 
    }, { 
     "id": "9", 
     "person_id": "2", 
     "date": "2012-01-18 19:36:13" 
    }, { 
     "id": "12", 
     "person_id": "2", 
     "date": "2012-01-19 00:12:32" 
    }] 
}; 
var store = Ext.create('Ext.data.Store', { 
    model: 'MyAppName.model.Person', 
    data: data 
}); 
var instanceModel = store.getAt(0); 
//Show 'Person' model contents. 
console.info(instanceModel); 

//Show 'logins' for that person 
console.info(instanceModel.logins()); 

檢查相應的JsFiddle here

希望這可以讓你在正確的軌道上。

相關問題