Пользовательская привязка для $.expandingTextarea с Knockout.js

Я пишу пользовательскую привязку для использования $.expandingTextarea с Knockout.js.

Следуя отличной статье Другой взгляд на пользовательские привязки для KnockoutJS, я надеялся, что это будет так же просто, как:

ko.bindingHandlers.expandingTextarea = {
  init: function(element, valueAccessor) {
    $(element).expandingTextarea();
  },
   update: function(element, valueAccessor, aBA, vm) {
    ko.bindingHandlers.value.update(element, valueAccessor, aBA, vm);
    $(element).expandingTextarea("resize");
  }
}

К сожалению, это не работает должным образом, т. е. когда в текстовую область вносятся изменения, соответствующая модель представления не обновляется. Вот jsFiddle, иллюстрирующий проблему.

Как создать пользовательскую привязку KO для плагина ExpandingTextarea?


person Brian M. Hunt    schedule 28.06.2012    source источник


Ответы (1)


Вот решение для jsFiddle, а именно добавление привязки значения init (в котором есть код для захватывать события, указанные параметром valueUpdate):

ko.bindingHandlers.expandingTextarea = {
    init: function(element, valueAccessor, aBA, vm) {
        $(element).expandingTextarea();
        ko.bindingHandlers.value.init(element, valueAccessor, aBA, vm);
    },
    update: function(element, valueAccessor, aBA, vm) {
        ko.bindingHandlers.value.update(element, valueAccessor, aBA, vm);
        $(element).expandingTextarea("resize");
    }
};

Я надеюсь, что это поможет кому-то еще! :)

person Brian M. Hunt    schedule 29.06.2012