knockout: добавить еще одну привязку в пользовательский init связывания

Я хочу создать пользовательскую привязку как сокращение для добавления других привязок - как макрос.

<div data-bind="foo: 1"></div>

следует сделать то же самое, что и

<div data-bind="click: clickHandler, css: { someClass: someObservable }, ...">
</div>

Что-то вроде:

ko.bindingHandlers.foo = {
    init: function(el,val,bindings,model,context) {
        // some way to add { click: clickHandler } to bindings()
    }
}

2 ответа

Решение

Ты можешь позвонить ko.applyBindingsToNode изнутри init вашего обработчика привязки, как:

ko.applyBindingsToNode({ click: someHandler, text: someText });

Если вы применяете что-то вроде потока управления, вам нужно передать контекст во втором аргументе.

Вы пробовали использовать jQuery в своем пользовательском компоновщике:

ko.bindingHandlers.foo = {
    init: function(el,val,bindings,model,context) {
        $(el).attr('data-bind', 'click: clickHandler');
    }
}
Другие вопросы по тегам