Ember.Array:如何以原子方式进行多次更改?

时间:2014-06-03 21:32:06

标签: arrays ember.js atomic

我有一个Ember.Array,我需要通过将一个元素移动到另一个元素来重新排列。现在,我有这个功能:

moveElement: (from, to) ->
  from_value = array.objectAt(from)
  array.removeAt(from)
  array.insertAt(to, from_value)

问题是,我在计算属性中使用此数组,并在removeAtinsertAt之间触发。我怎样才能确保这些变化是原子的?

谢谢!

1 个答案:

答案 0 :(得分:0)

所以,我设法使用arrayContentWillChangearrayContentDidChange和数组原语来实现它:

moveElement: (from, to) ->
  array = @get('array')
  # make all changes to array atomically
  array.arrayContentWillChange(from, 1, 0)
  from_value = array[from]
  array.splice(from,1)
  array.splice(to,0,from_value)
  array.arrayContentDidChange(to, 0, 1)

我不确定我是否正确使用arrayContent..Change功能。他们采用3个论点:startIdxremoveAmtaddAmt。其中,表示起始索引,要删除的元素数以及要添加的元素数。我使用fromto值来表示我要删除from处的一个元素,并在to添加一个元素。

似乎现在正在工作。