Knockout JS跨视图模型引用

时间:2013-05-21 20:21:59

标签: knockout.js

我有一个聚合视图,它在knockout中组合了多个视图(类似于局部视图,主视图允许我访问视图模型而不管视图页面如何)。有没有办法在淘汰赛中引用另一个视图中的属性?我有一个输入框,我想在一个VM中激活ajax请求,但我还需要它在另一个虚拟机中触发请求。我知道我可以在一个VM中将它们链接在一起,但如果我不需要,我不想显式引用一个单独的VM。

主视图的格式为

function AggregateViewModel() {
   var self = this;
   self.vm1= new FirstViewModel();
   self.vm2= new SecondViewModel();
   self.vm3= new ThirdViewModel();

}

我想绑定类似于

的输入
<input data-bind="click: vm1.inputValue, click: vm2.inputValue">

这样我就可以在同一个点击事件中触发两个ajax事件。

感谢您提供任何帮助/意见

1 个答案:

答案 0 :(得分:2)

您无法绑定两个点击处理程序,第二个将首先覆盖。但是你可以在你的视图模型上聚合它们:

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();
    };
}

并绑定到该单个函数:

<input type="button" value="test" data-bind="click: handleClick" />

启用控制台后,请参阅JSFIDDLE