просмотреть все расширители и пользовательские привязки для наблюдаемых

Можно ли увидеть все расширители и привязки, прикрепленные к наблюдаемому в Knockout JS?

Образец модели представления:

var viewModel = function(){
  var self = this;

  self.firstName = ko.observable().extend({required: "Please enter a name",
                                           logChange: "first name" });

  self.lastName = ko.observable().extend({ required:true});

}

Я также использую несколько пользовательских обработчиков привязки, включая Knockout X-Editable Plugin в дополнение к Плагин проверки KO

Пример многостраничного просмотра:

  <!--Screen 1 -->
  <input data-bind="value:firstName"/>

   ....

  <!--Screen 2 -->
  <span data-bind="editable:firstName"></span>

О. Есть ли способ запросить self.firstName() и получить список всех расширителей?

{required: "Please enter a name", logChange: "first name" }

Б. Есть ли другой запрос, который я могу выполнить, чтобы получить все обработчики привязок, которые зависят от этого наблюдаемого объекта? Можно ли вернуть это как элементы DOM?

В основном я пытаюсь отобразить ошибки проверки для импортированных данных, но я хочу добавить их ниже <span data-bind="editable"/>, если я нахожусь во втором представлении.

Это достаточно просто при проверке каждого ввода по отдельности, но становится сложнее при использовании ko.validation.group(viewModel). Даже если я повторяю каждую ошибку, я не вижу, как я могу связать их с исходным наблюдаемым, вызвавшим ошибку.


person lyma    schedule 12.06.2013    source источник


Ответы (1)


Существует пользовательская привязка, которую вы можете использовать

<span data-bind="validationMessage: myObservable"></span>

Если этого недостаточно, вам нужно проявить творческий подход :D

Не существует универсального способа увидеть все расширители на наблюдаемом объекте. Проверка KO добавляет несколько функций и наблюдаемых к расширенной наблюдаемой, которую вы можете использовать.

  • очиститьОшибка
  • ошибка
  • является действительным
  • isValidating
  • правила
  • setError

Вам нужно создать пользовательскую привязку, чтобы иметь возможность видеть все привязки, прикрепленные к элементу. Это неплохо, это плохая практика - иметь зависимости от View от ViewModel. Из вашей пользовательской функции инициализации или обновления привязки у вас есть allBindingsAccessor

ko.bindingHandlers.myBinding = {
    init: function(element, accessor, allBindingsAccessor) {
       var valueAttachedToCheckedBinding = ko.utils.unwrapObservable(allBindingsAccessor().checked);
    }
}
person Anders    schedule 13.06.2013
comment
Да, я знал о привязке validationMessage, но мне было интересно, есть ли другой способ просто получить сообщение и манипулировать им самостоятельно при работе с validatedObservable (группа проверки). Если это возвращает массив ошибок, которые сами являются наблюдаемыми, есть ли функция, которую я могу вызвать для каждой ошибки, чтобы найти родителя? - person lyma; 13.06.2013
comment
Нет, к сожалению, единственный, кто знает структуру модели представления, — это контекст привязки. - person Anders; 13.06.2013