Если ваше представление показывает только один атрибут - например, если это флажок, показывающий некоторый логический атрибут вашей модели - вы должны прослушать событие 'change: attribute_name' для этого атрибута, как описано в Магистральные документы .
Если ваше представление более сложное и основано на нескольких атрибутах модели - например, если это представление для элемента списка «Делать», в котором есть элементы «done», «text» и «dueDate», прослушайте ' изменить 'событие. В этом случае вы можете либо обновить все элементы в каждом событии, либо использовать changeAttributes (), чтобы определить, какие элементы необходимо обновить.
Для иллюстрации ...
Обновить атрибуты, используя события «change: attribute_name»:
Этот стиль хорошо работает для простых представлений, где количество отображаемых атрибутов модели составляет <3 или около того. Более того, и код становится немного громоздким. </p>
model.bind('change:done', function() {
view.doneElement.checked = model.get('done');
});
model.bind('change:text', function() {
view.textElement.value = model.get('text');
});
model.bind('change:dueDate', function() {
view.dueDateElement.value = model.get('dueDate');
});
Обновить все о событиях «изменения»:
Этот стиль хорошо работает для сложных представлений, которые отображают 4 или более атрибутов (количество атрибутов 3/4 является лишь приблизительным ориентиром, основанным главным образом на моем личном мнении).
model.bind('change', function() {
view.doneElement.checked = model.get('done');
view.textElement.value = model.get('text');
view.dueDateElement.value = model.get('dueDate');
});
Недостатком этого является то, что при любом изменении каждый элемент представления обновляется. Так, например, если человек помечает элемент todo как «выполненный», текст будет перерисован, возможно, потеряв любой выбранный элемент. Иногда такие вещи являются проблемой, иногда нет - вам придется решать, основываясь на том, что именно делает ваш взгляд.
Обновлять только то, что изменилось с момента последнего события 'change':
Это более нюансированная вариация из вышеперечисленного, объединяющая в себе лучшее из обоих подходов. Он обновляет элементы представления, которые необходимо обновить, на основе результатов changeAttributes ().
model.bind('change', function() {
var diff = model.changedAttributes();
for (var att in diff) {
switch(att) {
case 'done':
view.doneElement.checked = model.get('done');
break;
case 'text':
view.textElement.value = model.get('text');
break;
case 'dueDate':
view.dueDateElement.value = model.get('dueDate');
break;
}
}
});
Наконец, я отмечу, что есть еще один вариант, который заключается в том, что представление хранит хэш значений, которые он отображает, и передает его в метод changeAttributes (). Обычно в этом нет необходимости, поэтому я не буду утомлять вас подробностями здесь.