【问题标题】:Populating associated models with nested JSON使用嵌套 JSON 填充关联模型
【发布时间】:2012-04-23 16:29:37
【问题描述】:

我有以下数据:

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);
});

但这似乎不太好。

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

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

【问题讨论】:

    标签: extjs model extjs4 store


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-19
      • 1970-01-01
      • 2021-12-25
      • 1970-01-01
      相关资源
      最近更新 更多