假设我们有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。
这似乎有点不明显,并且严重创建了额外的数据副本。对于这样的问题,是否有更清洁的解决方案?
答案 0 :(得分:0)
更简洁的方法是将常用对象仅存储在顶级主ViewModel中,因为所有子VM都继承父VM中的数据对象。
您仍然可以绑定到它们或在公式中使用,就像它们在子VM中一样。 见: