【发布时间】:2015-11-23 16:36:20
【问题描述】:
我有一个有自己的视图模型的类,我在我的主视图中创建了这个类的 2 个实例。在主视图中,我想为我的 2 个类实例传递值,但我似乎无法让它工作......我想我只是不理解一些非常简单的概念。
预期结果是 value1 + value2 字段有 value1 和 value2 的串联,第一个 myValue 显示 value1,第二个 myValue 显示 value2。这是我的代码和example:
Ext.application({
name: 'Fiddle',
launch: function() {
Ext.define('MyViewModel', {
extend: 'Ext.app.ViewModel',
alias: 'viewmodel.myView',
formulas: {
doSomething: function(getter) {
console.log(getter('value1'), getter('value2'));
return getter('value1') + getter('value2');
}
}
});
Ext.define('MyView', {
extend: 'Ext.panel.Panel',
xtype: 'myView',
viewModel: {
type: 'myView'
},
config: {
myValue: null
},
publishes: {
myValue: true
},
items: [
{
xtype: 'displayfield',
fieldLabel: 'myValue',
bind: {
value: '{myValue}'
}
}
]
});
Ext.create('Ext.container.Container', {
renderTo: Ext.getBody(),
items: [
{
xtype: 'displayfield',
fieldLabel: 'display',
bind: {
value: '{doSomething}'
}
},
{
xtype: 'myView',
reference: 'view1',
title: 'View1',
bind: {
myValue: '{value1}'
}
},
{
xtype: 'myView',
reference: 'view2',
title: 'View2',
bind: {
myValue: '{value2}'
}
}
],
viewModel: {
data: {
value1: 'Something',
value2: 'something else'
}
}
})
}
});
【问题讨论】:
-
为什么你认为你的
Ext.container.Container实例会使用MyViewModel?在其viewModel配置中指定type: 'myView'并查看差异。同样,如果myView绑定有自己的视图模型,你怎么能期望它们使用来自父视图模型的数据? -
我实际上不希望我的容器使用 MyViewModel... 但是,我确实用我的两个数据值指定了它自己的本地 viewModel。我希望我能以某种方式将父母绑定的数据传递给孩子,但我想这是不可能的?
-
这一切皆有可能,但这将使您的设计更紧密地耦合。 “最佳实践”解决方案将取决于您的实际目标。例如,
myView实例可能不需要拥有自己的视图模型,它们可以使用父视图模型? -
嗯,就是这样,我想在其他视图中使用这个类,所以我基本上想防止到处复制和粘贴代码。我只是希望我能给它一个父母的绑定变量......我想我完全错了。
标签: javascript extjs mvvm extjs5