Это должно быть легко, но я не могу понять это. Я создаю представление, которое ведет себя немного как три состояние выбора несколько, а основной компонент является собственностью на представлении, которое перечисляет каждый параметр и его статус:Эмбер наблюдаемая карта
TriState = Ember.View.extend({
...
childView: TristateItem,
selectionStates: {}
});
TristateItem = Ember.View.extend({
...
selectedState: function() {
var value = this.get('value');
var states = this.get('parentView.selectionStates');
var state = states[value];
if (Ember.isNone(state))
return 0;
return state;
}.property('value', 'parentView.selectionStates'),
click: function(event) {
var states = this.get('parentView.selectionStates');
var value = this.get('value');
var newState = states[value];
if (Ember.isNone(newState) || newState == 0)
newState = 1;
else if (newState == 1)
newState = -1;
else
newState = 0;
states[value] = newState;
event.stopPropagation();
}
Таким образом, после нескольких кликов, значения из selectionStates
может быть
{0: 1, // value "0" is selected with state "1"
3: -1, // value "3" is selected with state "-1"
4: 0} // value "4" is not selected
Это прекрасно работает, но значение TristateItem.selectedState
не меняется. Я предполагаю, что это связано с тем, что невозможно наблюдать объект javascript, но я не могу найти ничего наблюдаемого в Ember, что эквивалентно. Как я могу это сделать?
Дубликат http://stackoverflow.com/questions/22388402/how-to-observe-all-object-property-changes – user3995789
Я видел это, но есть две проблемы. Во-первых, это похоже на серьезный перебор для моей проблемы. Во-вторых, я не знаю названия свойств заранее. Они динамически добавляются и удаляются. – aquavitae
Я сделал это раньше, и я написал свой собственный класс ObservableMap. Это не слишком сложно. Я посмотрю, смогу ли я его где-нибудь найти. – GJK