Когда требуется Knockoutjs пользовательская привязка

Пытаясь узнать, Knockoutjs.i нашел код, связанный с пользовательским связыванием Knockoutjs, но это не очень хорошо.

<input data-bind="value: name" />
<hr/>
<div data-bind="fadeInText: name"></div>

ko.bindingHandlers.fadeInText = {
    update: function(element, valueAccessor) {
        $(element).hide();
        ko.bindingHandlers.text.update(element, valueAccessor);
        $(element).fadeIn(); 
    } 
};

var viewModel = {
    name: ko.observable("Bob")
};

ko.applyBindings(viewModel);

я просто не понимаю, когда люди идут на кастом привязку?

1) если возможно, скажите мне несколько ситуаций, когда выборочная привязка будет вариант?

2) если кто-то увидит код, он сможет понять пользовательскую привязку fadeInText и viewModel не имеет никакого отношения, но все же он работает. как?

3) если бы существовала модель с несколькими представлениями, как я могу указать имя модели представления с именем привязки во время привязки?

Ссылка jsfiddle приведенного выше кода http://jsfiddle.net/rniemeyer/SmkpZ/

4) как добиться того же вывода без пользовательской привязки? было ли это возможно?

пожалуйста, ответьте на мой вопрос по смыслу. Спасибо

1 ответ

Вот несколько ответов:

  1. Пользовательские привязки полезны во многих сценариях и, на мой взгляд, не должны использоваться в качестве последнего средства. В любое время, когда вы хотите соединить вашу DOM и данные способом, который еще не поддерживается встроенными привязками, тогда они являются хорошим вариантом. Как я перечислил выше, вот статья, которая могла бы помочь прояснить.

  2. Пользовательская привязка косвенно связана с моделью представления, вызывая ko.bindingHandlers.text.update, Таким образом, это эффективно text связывание. text связывание читает переданное значение и отображает.

  3. Для моделей с несколькими представлениями этот ответ описывает некоторые варианты обработки моделей с несколькими представлениями.

  4. Без настраиваемой привязки вы можете не использовать jQuery и использовать CSS (с учетом поддержки браузера и префиксов). Например, вы можете сразу добавить класс к элементу, например:

С CSS, как:

.message {
    opacity: 0;
    transition: opacity 2s ease-in;
}

.load {
    opacity: 1;
}

Элемент будет начинаться с opacity: 0 и сразу же перейти к opacity: 1 более 2 секунд.

Я бы не рекомендовал использовать jQuery непосредственно в вашей модели представления. Настраиваемые привязки являются инструментом, доступным вам для этих сценариев, и предоставляют большую часть возможностей, которые предоставляет Knockout.

Надеюсь это поможет.

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