2014-04-08 148 views
2

目前,我有我的所有的標籤看起來像這樣:您可以在自定義綁定中設置現有的Knockout綁定嗎?

<label data-bind="css: { notdone: FirstName.isModified() && !FirstName.isValid(), 
     done: FirstName.isModified() && FirstName.isValid() }">FirstName</label> 

我想創建一個自定義綁定中提取出跨標籤重複沒有重新實現CSS結合。

我可以在我的自定義綁定中使用CSS綁定嗎?

如果沒有,那麼我將爲了重新發明輪子擺脫一些重複的,像這樣:

ko.bindingHandlers.validationLabel = 
{ 
    update: (element, valueAccessor) => 
    { 
     var value = valueAccessor(); 
     var isModified = value.isModified(); 
     var isValid = value.isValid(); 

     $(element).removeClass("done notdone"); 

     if (!isModified) 
      return; 

     $(element).addClass(isValid ? "done" : "notdone"); 
    } 
} 
+1

閱讀後,我傾向於使用[template](http://knockoutjs.com/documentation/template-binding.html)作爲標籤。假設'FirstName'是一個可觀察對象,將它與您要使用的標籤一起傳遞到模板中,並使用動態類版本的css綁定。參見[fiddle](http://jsfiddle.net/origineil/eDLKB/)。 – Origineil

回答

1

正確的做法是使用ko.applyBindingsToNode

var notValid = ko.computed(function() { 
    return !isValid(); 
}); 
ko.applyBindingsToNode(element, { done: isValid, notdone: notValid }); 

這樣,它將正確地連接綁定,而不僅僅是調用更新方法。它應該從您的自定義綁定的init函數中調用。不是每次更新

相關問題