knockoutjs - 区分从2视图模型绑定的按钮上的click事件

时间:2013-02-07 12:59:32

标签: knockout.js

我在每个div中都有两个嵌套的div和2个按钮:

<div id="d1">
    <button data-bind="click:x">
        invoke x
    </button>
    <div id="d2">
        <button id="Q_btn" data-bind="click:x">
            invoke x
        </button>
    </div>
</div>

和2视图模型绑定为:

var viewModel1 = {
    x : function() {
        alert('from model1')
    }
}

var viewModel2 = {
    x : function() {
        alert('from model2')
    }
}

ko.applyBindings(viewModel2, document.getElementById('d2'));
ko.applyBindings(viewModel1, document.getElementById('d1'));

现在当我点击d2(Q_btn)内的按钮时,2提醒,第一个显示'来自mode2',第二个显示'来自model1'。 我希望当我点击Q_btn时,只有第一个警报发生。

注意:在我的项目中,我在div上加载了一些html页面。每个div都有自己的视图模型。到现在为止每个人都可以(每个div都有自己的viewmodel并且不会发生冲突)但是在嵌套div的情况下会出现上述问题。

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

我认为没有任何方法按照你的建议方式做你想做的事。我建议你在这里实现一个发布者/订阅者模式,或者自己滚动(使用像jquery.pubsub这样的东西),或者你可以使用一个名为knockout-postbox的扩展名。

这样可以让您的视图模型很好地分离,但允许它们相互通信。