2016-04-28 11 views
0

Ich mache eine Bindung, die das Hinzufügen einer CSS-Klasse in Abhängigkeit von einem booleschen Wert vereinfacht. Ich wollte applyBindingAccessorsToNode verwenden, weil es sauberer scheint als .init und .update der ursprünglichen css Bindung in der neuen Bindung aufrufen.Verwendung von applyBindingAccessorsToNode in benutzerdefinierten Bindung

Mein Problem ist, wie man valueAccessor verwenden, weil die Bindung scheint falsch geparst abhängig davon, ob der angegebene Wert ein Observable, ein Objekt oder eine evaluierte Observable ist.

Die Bindung ist diese:

ko.bindingHandlers.ignoreValidation = { 
    init(element, valueAccessor, allBindings, viewModel, bindingContext) { 
     ko.applyBindingAccessorsToNode(element, { css: { ignoreValidation: valueAccessor() } }, bindingContext); 
    } 
} 

Dies führt zu einem Fehler (die [object Object] ist offensichtlich unbeabsichtigte)

Message: Unable to process binding "ignoreValidation: function(){return showLookup }" 
Message: Unable to process binding "css: [object Object]" 
Message: d is not a function 

TL; DR; Ich möchte eine Bindung programmgesteuert zu einem Element hinzufügen, ohne beide update und init zu verwenden.

Antwort

0

Mit ko.applyBindingsToNode funktioniert wie erwartet:

ko.bindingHandlers.ignoreValidation = { 
    init(element, valueAccessor, allBindings, viewModel, bindingContext) { 
    ko.applyBindingsToNode(
     element, 
     { css: { ignoreValidation: valueAccessor() }}, 
     bindingContext); 
    } 
} 

Ein funktionierendes Beispiel kann in this fiddle finden.

Verwandte Themen