0

2つのネストされた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つのアラートが発生し、最初のボタンは「モード2から」、2番目のボタンは「モデル1から」と表示されます。Q_btnをクリックすると、最初のアラートのみが発生します。

注:私のプロジェクトでは、divにいくつかのhtmlページをロードします。各divには独自のビューモデルがあります。これまではすべて問題ありませんでしたが(各divは独自のビューモデルで動作し、競合は発生しません)、ネストされたdivの場合は上記の問題が発生しました。

私はあなたの助けに感謝します

4

1 に答える 1

0

私はあなたが提案している方法であなたが望むことをする方法はないと思います。ここでパブリッシャー/サブスクライバーパターンの実装を検討することをお勧めします。独自のパターンをローリングするか(jquery.pubsubなどを使用)、または使用できるノックアウトポストボックスと呼ばれる拡張機能があります。

これにより、ビューモデルを適切に分離しながら、相互に通信できるようになります。

于 2013-02-07T13:12:26.453 に答える