ExtJS:允许在关联模型中自动解析嵌套数据

时间:2013-11-20 21:18:05

标签: extjs extjs4

我无法让框架正确解析。当生成的商店名称是关联模型的小写,复数名称时(即,从嵌套的posts模型生成Post商店时),设置关联以异步加载嵌套数据没有问题。但是在这里,当关联键与关联的模型名称无关时,我无法找到正确的配置以允许框架自动解析相同响应中提供的数据:

App.model.Foo.js

// Bar
Ext.define('Bar', {
    extend: 'Ext.data.Model',
    fields: [...],

    belongsTo: 'App.model.Foo'
});

// Foo
Ext.define('App.model.Foo', {
    extend: 'App.model.Base',

    fields: [...],

    hasMany: {
        model: 'Bar',
        name: 'children',             // trying to allow parsing from 'children'
        associationKey: 'children',   // property, but not working
        reader: 'json'
    }
});

数据

{
    data: {
        // Foo fields
        children: [{
             // Bar objects
        }]
    },
    success: true
}

children被添加为Foo模型上的商店getter-function,但数据未在响应数据中从children键解析。

1 个答案:

答案 0 :(得分:0)

这是一个工作示例(使用ExtJS 4.2.x测试)

Ext.onReady(function () {

    Ext.define('Bar', {
        extend: 'Ext.data.Model',
        fields: ['barfield'],
        belongsTo: 'Foo'
    });


    Ext.define('Foo', {
        extend: 'Ext.data.Model',

        fields: ['foofield'],

        hasMany: {
            model: 'Bar',
            name: 'children',
            associationKey: 'children'
        },

        proxy: {
            type: 'ajax',
            url: 'data.json',
            reader: {
                type: 'json',
                root: 'data'
            }
        }
    });

    Foo.load("PARAM", {
        scope: this,
        callback: function (record, operation, success) {
            console.log(record.get("foofield"));

            var children = record.children();   // get the store
            console.log(children.getAt(0).get("barfield"));
            console.log(children.getAt(1).get("barfield"));
        }
    });
});

JSON数据是:

{
    "data": {
        "foofield": "value",

        "children": [
            {
                "barfield": "bval1"
            },
            {
                "barfield": "bval2"
            }
        ]
    },
    "success": true
}