Привязка нокаута 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. функция будет выполнена при возникновении события. Надеюсь, что это очищает?

Другие вопросы по тегам