Knockout JS cross-view model referencing
我有一个聚合视图,它结合了淘汰赛中的多个视图(有点像部分视图,主视图允许我访问视图模型,而不管视图页面如何)。有没有办法在淘汰赛中引用另一个视图中的属性?我有一个输入框,我想在一个 VM 中触发 ajax 请求,但我还需要它在另一个 vm 中触发请求。我知道我可以在其中一个 VM 中将它们链接在一起,但如果我不需要,我不想显式引用单独的 VM。
主视图的形式为
1 2 3 4 5 | function AggregateViewModel() { var self = this; self.vm1= new FirstViewModel(); self.vm2= new SecondViewModel(); self.vm3= new ThirdViewModel(); |
}
我想绑定类似于
的输入
1 | <input data-bind="click: vm1.inputValue, click: vm2.inputValue"> |
这样我就可以在同一个点击事件上触发两个 ajax 事件。
感谢您的任何帮助/评论
您不能绑定两个点击处理程序,第二个将首先覆盖。但是你可以在你的视图模型上聚合它们:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | function AggregateViewModel() { var self = this; self.vm1 = { handleClick: function () { console.log('vm1'); } }; self.vm2 = { handleClick: function () { console.log('vm2'); } }; self.vm3 = {}; self.handleClick = function () { console.log('Wrapper'); self.vm1.handleClick(); self.vm2.handleClick(); }; } |
并绑定到那个单一的函数:
1 | <input type="button" value="test" data-bind="click: handleClick" /> |
查看 JSFIDDLE,打开控制台。