2012-10-25 87 views
1

我有一個外部div綁定到具有ProcessClick功能的視圖模型,並且在運行時的內部div綁定到不同的視圖模型,但具有相同的屬性點擊的功能名稱。出於某種原因,只有外部模型的函數在內部虛擬機的函數執行之前也會被調用。綁定內部div到具有相同屬性的不同knockoutJS視圖模型

標記:

<div id="max-outer"> 
    <span data-bind="click: BindInner">Bind Inner</span> 
    <br/> 
    <br/> 
    <span data-bind="click: ProcessClick">Outer</span> 
    <div id="max-inner"> 
     <span data-bind="click: ProcessClick">Inner</span> 
     <br/> 
    </div> 
</div> 

JS:

function InnderModel() { 
    self = this; 

    self.ProcessClick = function() 
     { 
      alert("Inner clicked"); 
     }; 
} 

function OuterModel() { 
    self = this; 

    self.ProcessClick = function(){ 
      alert("Outer clicked"); 
     }; 

    self.BindInner = function() { 
     ko.cleanNode(document.getElementById("max-inner")); 
     ko.applyBindings(new InnderModel(), document.getElementById("max-inner")); 
    }; 
} 

ko.applyBindings(new OuterModel(), document.getElementById("max-outer")); 

這裏是一個小提琴: http://jsfiddle.net/mpavlov/H2ZnV/8/

的想法是,點擊綁定內和內跨度點擊只會顯示「內部點擊「警報,而不是兩個。這可以以某種方式實現嗎?

回答

5

第一次調用applyBindings時,內部跨度將受到限制。
調用ko.cleanNode實際上並沒有刪除任何事件處理程序,因此它仍然具有原始處理程序。

您可以使用的一種技術是:http://www.knockmeout.net/2012/05/quick-tip-skip-binding.html

這允許您識別您希望Knockout跳過綁定的區域。

您將添加一個簡單的自定義你的部分結合,你不希望被束縛最初:

ko.bindingHandlers.stopBinding = { 
    init: function() { 
     return { controlsDescendantBindings: true }; 
    } 
}; 

會是這樣:http://jsfiddle.net/rniemeyer/Tmz8m/

相關問題