3
这应该很容易,但我无法弄清楚。我创建的行为有点像三态多重选择一个视图,和其核心部件是视图中的一个属性,它列出了每个选项及其状态:Ember可观察地图
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 2014-09-04 08:59:27
我看到了,但有两个问题。首先,它看起来像是对我的问题严重矫枉过正。其次,我不提前知道房产名称。它们是动态添加和删除的。 – aquavitae 2014-09-04 10:20:05
我之前做过这个,我写了我自己的'ObservableMap'类。这并不难。我会看看我是否能找到它。 – GJK 2014-09-04 12:38:39