使用extjs

时间:2017-06-12 21:30:10

标签: extjs

假设我们有1个父视图模型(对应于视口)和2个嵌套(网格和窗口)视图模型。在网格动作列上单击,我们获得一个记录ID,将其作为ajax请求url部分传递,并将响应显示在窗口文本字段中。如果响应中没有显示的值显示默认值。

有趣的是,如何使用viewmodel绑定将响应数据传递给窗口文本字段。我提出了以下解决方案:

1)在ajax请求中,使用将通过模型传递的响应数据创建网格视图模型链接,并在需要时创建默认值:

grid.getViewModel().linkTo('custom', {
    reference: 'CustomModel',
    create: data
});

Ext.define('CustomModel', {
    extend: 'Ext.data.Model',
    fields: [
        { name: 'name', defaultValue: 'default name' },
        { name: 'value', defaultValue: 'default value' }
    ]
});

2)使用网格视图模型中的公式将数据发布到父视图模型:

formulas: {
    publishCustom: function(get) {
        this.set('main.custom', get('custom'));
    }
}

3)使用父(视口)viewmodel

中的数据填充窗口文本字段
bind: '{main.custom.name}'

您可能会找到小提琴here

这似乎有点不明显,并且严重创建了额外的数据副本。对于这样的问题,是否有更清洁的解决方案?

1 个答案:

答案 0 :(得分:0)

更简洁的方法是将常用对象仅存储在顶级主ViewModel中,因为所有子VM都继承父VM中的数据对象。

您仍然可以绑定到它们或在公式中使用,就像它们在子VM中一样。 见:

ViewModel Data and Inheritance