我有一个Ember.Array,我需要通过将一个元素移动到另一个元素来重新排列。现在,我有这个功能:
moveElement: (from, to) ->
from_value = array.objectAt(from)
array.removeAt(from)
array.insertAt(to, from_value)
问题是,我在计算属性中使用此数组,并在removeAt
和insertAt
之间触发。我怎样才能确保这些变化是原子的?
谢谢!
答案 0 :(得分:0)
所以,我设法使用arrayContentWillChange
,arrayContentDidChange
和数组原语来实现它:
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个论点:startIdx
,removeAmt
,addAmt
。其中,表示起始索引,要删除的元素数以及要添加的元素数。我使用from
和to
值来表示我要删除from
处的一个元素,并在to
添加一个元素。
似乎现在正在工作。