Если у меня есть пользовательская привязка, которая объединяет другие, например:
ko.bindingHandlers.binding1 = {
init: function (element, valueAccessor, allBindingsAccessor, viewModel) {
var ctx = ko.utils.unwrapObservable(valueAccessor());
ko.applyBindingsToNode(element, { 'binding2': ctx });
ko.applyBindingsToNode(element, { 'binding3': ctx });
}
};
«allBindingsAccessor» возвращает только текущую привязку в своей функции инициализации.
Я ожидал, что он вернет привязку 1 и привязку 2 в функции «инициализации» привязки 2 и привязку 1, 2 и 3 в функции «инициализации» привязки 3.
Следующая скрипка показывает поведение, о котором я упоминал. http://jsfiddle.net/J3sjq/5/
Проблема в том, что моя привязка3 зависит от наличия других привязок, например, привязки2.
Каков наилучший способ реализовать такое поведение? Я думал об изменении контекста, чтобы сообщить о наличии других привязок, но это звучало немного как хак.
Заранее спасибо.
РЕДАКТИРОВАТЬ:
Я обновил свою скрипку, чтобы показать больше исходной проблемы, я пытался упростить, но, возможно, перестарался.
В новой скрипке привязка1 заменена на initFieldStatus, которая инициализирует 3 других сложных привязки, каждая из которых вычисляет состояние поля ввода, привязка isInputAtWarning зависит от других привязок, объявленных для элемента.
Надеюсь, это прояснит вопрос.
Спасибо.
РЕДАКТИРОВАТЬ 2:
Я предоставил скрипку с более реальным примером того, что я пытаюсь реализовать.
allBindingsAccessor
дает доступ только к привязкам, примененным одновременно. Когда вы вызываетеko.applyBindingsToNode
, эти привязки отличаются от любой другой операции привязки. - person Michael Best   schedule 03.12.2013