0

我有一个聚合视图,它在剔除中组合了多个视图(有点像部分视图,主视图允许我访问视图模型,而不管视图页面如何)。有没有办法在淘汰赛中引用另一个视图中的属性?我有一个输入框,我想在一个 VM 中触发 ajax 请求,但我还需要它在另一个 vm 中触发请求。我知道我可以在其中一个 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 事件。

感谢您的任何帮助/评论

4

1 回答 1

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

于 2013-05-21T20:51:49.703 回答