关于knockout.js:Knockout JS 跨视图模型引用

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,打开控制台。