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/ Chapter 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 に答える