Sencha Touch - 访问1对1模型关系

时间:2011-08-18 19:51:09

标签: json extjs

我正在尝试从我的模型商店访问以下JSON。我访问根(名称和地址)没有问题,但我无法访问财务(NetWorth或收入)中的任何内容。我已经验证了下面的JSON是从服务器返回的。

我知道这必须非常容易,但我见过的每个例子都展示了如何访问1对多的关系。我的模型是1到1.人 - >财务。现在我没有任何关联设置,因为我不知道如何设置1对1的关系。我已经尝试过关联,我尝试过belongsTo,我已经在我的itemTPL中尝试过Financials.NetWorth。什么都没有。

有人可以给我看灯吗?

从服务器返回的JSON

[{
"PersonName": "John Smith", 
"Address": "123 main street",
"Financials": 
        [{
             "NetWorth": "$500,000", 
             "Income":"$67,000"
        }]
}]

我注册了我的模特。

Ext.regModel('Person', {
  fields: [
    {name: 'Name', type:'string'},
    {name: 'Address', type: 'string'},
  ],
});

Ext.regModel('Financials',{
  fields: [
    {name: 'NetWorth', type:'string'},
    {name: 'Income', type: 'string'},
  ],
});

并注册了商店

var commStore = new Ext.data.Store({
            model: 'Person',
            proxy: {
                type: 'ajax',
                url : 'Business/GetData',
                reader: {
                    type: 'json',
                }
            },
            autoLoad:false,
        });

并在列表中显示

var commList = new Ext.List({
        fullscreen: false,
        itemTpl : '<div>{PersonName}</div><div>{Business.NetWorth}</div>',   
        store: commStore,
        height:500,
        width:"100%",
    });

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

自己也是初学者,但看起来似乎有帮助(没有用你的代码测试)

仅限模特:

Ext.regModel('Person', {
  fields: [
    {name: 'Name', type:'string'},
    {name: 'Address', type: 'string'},
    {name: 'NetWorth', type:'string', mapping 'Financials.NetWorth'},
    {name: 'Income', type: 'string', mapping 'Financials.Income'},
  ],
});

并在模板代码中引用名称

    itemTpl : '<div>{PersonName}</div><div>{Business.NetWorth}</div>',  

变为

    itemTpl : '<div>{PersonName}</div><div>{NetWorth}</div>',  

答案 1 :(得分:0)

你说你的关系是1对1,但是你的JSON数据返回一个数组(有一个项目,但仍然是一个数组,因为你使用“[]”括号)进行财务。 这意味着Person应该成为这样的东西:

Ext.regModel('Person', {
  fields: [
    {name: 'Name', type:'string'},
    {name: 'Address', type: 'string'},
  ],
  hasMany: [
    {name: 'person', model: 'Person'}
  ]
});