Привязка нокаута autogrow удаляет привязку события изменения
У меня есть пользовательская привязка для плагина jquery autogrow, которую можно увидеть здесь. Autosize knockout
Код для справки:
ko.bindingHandlers.autogrow = {
init: function (element, valueAccessor, allBindingsAccessor) {
ko.applyBindingsToNode(element, { value: valueAccessor() });
ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
//$(element).data('autosize').remove();
});
$(element).autosize({ append: "\n" });
$(element).focus(function () {
$(element).trigger('autosize');
});
}
};
Я использую это следующим образом:
<textarea id="autogrow" class="text-nm span2" data-bind="autogrow: AreaProcessName, attr: { id: 'AreaProcessName' + Id }, event: { change: ViewModel.vmAreaProcess.SetAreaRevision($data) }"></textarea>
Привязка attr все еще работает, но привязка события при изменении перестала работать.
Есть идеи?
1 ответ
jsfiddle.net/sujesharukil/3p9bj/17, кажется, работает нормально. Все, что я сделал, это удалил ($data) из события change. Причина, как я указал в моем первом комментарии, заключается в том, что
data-bind="event: {'someevent': func()}
По сути дела, четный обработчик для someevent устанавливается как возвращение вызова func(). Так как ваша функция ViewModel.vmAreaProcess.SetAreaRevision не возвращает функцию-обработчик, она не будет выполнять обратный вызов, когда фактически вызывается функция even, потому что функция func() выполняется немедленно.
когда вы установите это так
data-bind="event: {'someevent': func}
вы на самом деле привязываете 'someevent' к обработчику func. функция будет выполнена при возникновении события. Надеюсь, что это очищает?