2015-05-06 51 views
1

我正在使用Knockout.js來處理項目中的許多事情。
除此之外,它還用於爲動態創建第三方工具的XML配置,這需要非常特定的嚴格標記。綁定後刪除數據綁定屬性

這意味着所有產生的標記都需要沒有任何data-bind屬性。

目前我可以通過另外的結合

<Element data-bind="attr: {'data-bind': false}" /> 

或可替代地這樣做所得的標記在整個過一個單獨的,附加的循環,除去所有data-bind屬性實現這一點。

這兩種解決方案都不是太簡單,第一種解決方案意味着非常冗長的模板,第二種解決方案需要在整個結果上進一步傳遞。

Knockout提供了一個更好的替代方案,可以在綁定應用後刪除所有data-bind屬性?

+0

你可以去JQuery和使用.removeAttr() – Robert

+0

@Robert感謝您的輸入,但是這與我提供的第二個選項相同,只是增加了庫的額外開銷,我專門沒有用。 – Nit

回答

4

也許preprocessNode可以幫助:

您可以掛接到淘汰賽的邏輯提供了一個節點預處理遍歷DOM。這是一個函數,Knockout將爲每個遍歷的DOM節點調用一次,無論是在UI初次綁定時,還是後來當注入任何新的DOM子樹時(例如,通過foreach綁定)。

下面將刪除的數據綁定屬性:

ko.bindingProvider.instance.preprocessNode = function(node) { 
    if (node.removeAttribute) { 
     setTimeout(function() { 
      node.removeAttribute('data-bind'); 
     }, 0); 
    } 
}; 

看到的是需要http://jsfiddle.net/jfjbpbtq/

setTimeout因爲淘汰賽會調用preprocessNode後讀取data-bind屬性。