Extjs:使用模型字段引用的关联数据的正确方法是什么?

时间:2016-04-18 13:24:10

标签: model-view-controller extjs foreign-key-relationship

Ext.data.Model类代表后端模型。就像在服务器代码中一样,它的一些字段可以通过reference属性成为另一个声明的模型类型。我发现使用模型的getAssociatedData()函数会返回一个包含所有这些引用字段的对象。但是它们只包含引用对象的数据对象,它们不是完全初始化的Ext.data.Model,它强制原始对象访问,并且无法使用模型的已配置代理等进行加载/保存。这是使用此功能的正确/唯一方式吗?我们一直在寻找一种从网格上的引用字段添加列的方法,但它似乎不起作用......我开始怀疑声明引用字段的用处。

示例代码:

Ext.define('MyApp.ModelA', {
    extend: 'Ext.data.Model',
    fields: [{
        name: 'modelb',
        reference: 'MyApp.ModelB'
    }]
});

Ext.define('MyApp.ModelB', {
    extend: 'Ext.data.Model',
    fields: [{
        name: 'modelId',
        type: 'int'
    }]
});

//...
var modelA = new MyApp.ModelA().load();
var modelB = modelA.getAssociatedData().modelb; //This is the only way to access it.
var modelBId = modelB.get('modelId') //This returns undefined because the function .get doesn't exist.
var modelBId = modelB.id; //This works because it is a simple object property access.
//...

1 个答案:

答案 0 :(得分:0)

正如Chad Peruggia所说,ExtJS似乎为reference字段创建了与字段名称匹配的特殊getter。使用getAssociatedData()只返回这些对象的原始形式(只有它们的data值),但使用特殊的getter(在我的情况下为getModelb()),它返回一个用给定数据初始化的完整模型