1

我有以下数据:

var data = [
    {
        id: 1,
        name: 'Ed Spencer',
        phoneNumber: '555 1234',
        children: [{
          id: 11,
          name: 'Baz'
        }]
    },
    {
        id: 2,
        name: 'Abe Elias',
        phoneNumber: '666 1234',
        children: [{
          id: 21,
          name: 'Foo'
        },{
          id: 21,
          name: 'Bar'
        }]
    }
];

有没有办法将它加载到某些模型和商店中,像这样?

Ext.define('Child', {
    extend: 'Ext.data.Model',
    fields: [
        {name: 'id',    type: 'int'},
        {name: 'user_id',    type: 'int'},
        {name: 'name',  type: 'string'}
    ],

    belongsTo: 'User'
});

Ext.define('User', {
    extend: 'Ext.data.Model',
    fields: [
        {name: 'id',    type: 'int'},
        {name: 'name',  type: 'string'},
        {name: 'phone', type: 'string', mapping: 'phoneNumber'}
    ],

    hasMany: {model: 'Child', name: 'children'}
});

var store = Ext.create('Ext.data.Store', {
    autoLoad: true,
    model: 'User',
    data : data
});

到目前为止,我只找到了一种方法,即遍历商店:

store.each(function(r){
  r.childrens().loadData(r.data.children);
});

但这似乎不太好。

我只想加载一次数据。我真的不想在每个孩子中指定外键,因为我的数据已经结构化。

有没有人做过类似的事情?有没有更好的方法来解决这个问题?

4

1 回答 1

5

想我已经修好了。显然,您需要在商店中使用阅读器,即使它只是一个记忆阅读器,如下所示:

var store = Ext.create('Ext.data.Store', {
    autoLoad: true,
    model: 'User',
    data : data,
    proxy: {
        type: 'memory',
        reader: {
            type: 'json'
        }
    }
});

然后它将填充所有模型,生成其关联而不需要外键。

我假设没有代理,数据以不同的方式加载,这不会填充我的模型。

于 2012-04-12T08:31:50.550 回答