#javascript #ember.js
#javascript #ember.js
Вопрос:
Я создал JSBin, где я демонстрирую свою проблему:
http://jsbin.com/pexolude/69/edit
Эксплонация:
В первом разделе у меня есть клиенты. Значение этого выбора (customer_value) фильтрует коллекцию 2-го выбора (ContactPersons). Если вы выберете клиента, будет включена кнопка «Новое контактное лицо». По щелчку он добавляет новое контактное лицо «Дейл» в закусочную Double R. (В моем приложении это форма, и новое контактное лицо будет добавлено к выбранному клиенту)
Испытание
- Выберите «Double R Diner»
- Добавить новое контактное лицо (Дейл добавлен, но его нет в списке контактных лиц Double R Diner)
- Смена на «Отель Грейт Нортен»
- Вернитесь в «Double R Diner» -> Дейл есть в списке
Было бы неплохо, чтобы свойство contact_persons автоматически обновлялось при добавлении нового элемента. Разве это не должно быть поведением по умолчанию? Или я должен каким-то образом вызвать это?
Ответ №1:
В целом, хорошее эмпирическое правило состоит в том, чтобы просмотреть все свойства, которые требуются в вашем вычисляемом свойстве, и если какое-либо из них влияет на значение вычисляемого свойства (что, я полагаю, они все делают), тогда они должны быть определены в методе property .
В этом случае вам нужно будет просмотреть каждое свойство в коллекции, для этого мы используем @each
ключевое слово. Важно отметить, что вы не можете углубиться более чем на один уровень @each
. http://emberjs.com/guides/object-model/computed-properties-and-aggregate-data /
contact_persons: function(){
var id = parseInt(this.get('customer_value'),10);
return this.get('contactPersons').filterBy('partner.id',id);
}.property('customer_value', 'contactPersons.@each.partner'),
Здесь мы говорим о том, что каждый раз, когда какая-либо новая запись добавляется / удаляется в ContactPersons, или partner
свойство изменяется для любого из них ( partner
само по себе, нет partner.foo
, partner
ссылка должна измениться), тогда свойство становится грязным.