2013-02-07 62 views
0

我有每個格內的兩個div嵌套和2個按鈕:knockoutjs - 按鈕區分點擊事件得到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',第二個說'來自模型1'。 我想要當我點擊Q_btn只有第一次警報發生。

注意:在我的項目中,我加載了divs上的一些html頁面。每個div都有自己的視圖模型。直到現在所有東西都可以(每個div都有自己的viewmodel並且沒有衝突發生),但是在嵌套div的情況下,上述問題已經發生。

我感謝你的幫助

+0

ko.applyBindings(viewModel1,document.getElementById('d1'));將綁定到外部div,並將兩個按鈕綁定到viewmodel1 – Anders

+0

不能返回false;從第一次警報(模型2),以防止冒泡? – paul

回答

0

我不認爲有做你的,你所提出的建議的方式想要的任何方式。我建議你看看在這裏實現一個發佈者/訂閱者模式,或者自己滾動(使用類似jquery.pubsub的東西),或者有一個可以使用的擴展名爲knockout-postbox

這將使您可以讓您的視圖模型很好地解耦,但允許他們相互交談。

+0

knockout-postbox可以解決我的問題。我使用停止綁定來防止從父到子的綁定,然後使用puplishon和subscribeto將更改從子級傳播到父視圖模型。 – mansh

+0

嗯,從技術上講,你可以感謝@RPNiemeyer寫他的插件!很高興我的回答指出你在正確的方向。 –

+0

謝謝保羅曼佐蒂。謝謝@RPNiemeyer – mansh