由于@ghemton的safeClone方法,我已经能够在Ember.js中运行jQuery UI Sortable:Ember.js + jQuery UI Draggable Clone
一旦排序完成,我很难让Ember知道这个变化.现在,我正在按照Move an array element from one array position to another的建议使用拼接将集合中的项目移动到适当的位置.这工作正常,但我有窗口滚动的问题.
在这个jsfiddle,http://jsfiddle.net/chrisconley/g4aE6/中,如果你滚动到底部,然后重新排序任何元素,窗口会跳回到顶部.如果在propertyWillChange和propertyDidChange之间放置一个断点,您可以看到Ember正在暂时从视图中删除所有项目,这导致窗口跳回到顶部.
App.MySortableView = Em.CollectionView.extend({
moveItem: function(fromIndex,toIndex){
var items = this.get('content');
this.propertyWillChange('content');
item = items.splice(fromIndex,1)[0];
items.splice(toIndex,item);
this.propertyDidChange('content');
}
});
更新方案:
(感谢Christopher Swasey的回答)
App.MySortableView = Em.CollectionView.extend({
moveItem: function(fromIndex,toIndex){
var items = this.get('content');
item = items.objectAt(fromIndex);
items.removeAt(fromIndex);
items.insertAt(toIndex,item);
}
});
最佳答案
原文链接:https://www.f2er.com/jquery/429567.html