2016-04-28 1 views
0

Я делаю привязку, которая упрощает добавление класса CSS в зависимости от логического значения. Я хотел использовать applyBindingAccessorsToNode, потому что кажется более чистым, чем вызов .init и .update родной связи css в новой привязке.Использование applyBindingAccessorsToNode в пользовательской привязке

Моя проблема заключается в том, как использовать valueAccessor, потому что привязка, похоже, неправильно обрабатывается в зависимости от того, является ли предоставленное значение наблюдаемым, объектом или оцененным наблюдаемым.

Связывание заключается в следующем:

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

Это приводит к ошибке (The [object Object], очевидно, непреднамеренное)

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; Я хочу добавить привязку к элементу программно, не используя как update, так и init.

ответ

0

Использование ko.applyBindingsToNode работает:

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

Рабочим пример можно найти в this fiddle.

Смежные вопросы