2

我在 Ember 对象上看到了这种奇怪的行为,当我更改 I 的数组时instance.get,更改将应用​​于类默认值(因此,应用于对象的任何新实例)。

但是,如果我将 alter 设置为计算属性,它会很好地工作(因为它确保我总是发送一个新的数组实例)。

我想知道这是正常行为吗,在我看来它不应该是这样,但我很可能误解了一些事情。

这是一个示例(可在此 jsfiddle中获得):

A = Ember.Object.extend
  array: []

a = A.create()
a.get('array').pushObject('something') # same with push

b = A.create()
b.get('array') # ['something']


B = Ember.Object.extend
  array: ( ->
    []
  ).property()

a = B.create()
a.get('array').pushObject('something else')

b = B.create()
b.get('array') # []
4

1 回答 1

2

这是一个很好的解释:http ://codebrief.com/2012/03/eight-ember-dot-js-gotchas-with-workarounds/第 6 章。tl;dr:当你想要一个数组作为属性时,在构造函数中初始化它,比如

A = Ember.Object.extend
  array: null
  init: (->
     @_super()
     @set('array', [])
  )

更新小提琴:http: //jsfiddle.net/Sly7/atjVu/4/

于 2012-10-16T21:12:03.747 回答