Ember.js 对contentBinding重新排序刷新Ember.CollectionView

Ember.js 对contentBinding重新排序刷新Ember.CollectionView,ember.js,Ember.js,我通过contentBinding将VenuesView绑定到VenuesController window.VenuesView = Em.CollectionView.extend contentBinding: 'VenuesController' itemViewClass: VenueView window.VenuesController = Em.SortableController.create content: [10, 11, 3, 101, 500, 2]

我通过contentBinding将
VenuesView
绑定到
VenuesController

window.VenuesView = Em.CollectionView.extend
  contentBinding: 'VenuesController'
  itemViewClass: VenueView

window.VenuesController = Em.SortableController.create
  content: [10, 11, 3, 101, 500, 2]
出于某种原因,排序/重新排序
VenuesController.content
不会更新页面,但任何其他操作都会更新页面

# Doesn't update DOM
VenuesController.set('content', VenuesController.get('content').sort())

# Updates DOM, but clears table and messes up users scroll position.
c = VenuesController.get('content').sort()
VenuesController.set('content', [])
VenuesController.set('content', c)

是否有人知道在对内容重新排序后如何重新呈现视图,而不必清空和重新填充数组?

是否尝试调用
contentWillChange
,然后才在控制器上调用
contentDidChange

如果手动修改属性,则要使用
this.propertyWillChange('content'))
PropertyIDChange(“内容”)
排序前后

App.Sortable=Ember.Mixin.create({
排序:函数(){
此。propertyWillChange(“内容”);
this.get('content').sort(App.sort);
此.propertyDidChange(“内容”);
}
});
App.venuesController=Ember.ArrayProxy.create(App.Sortable{
内容:[10,11,3,101,500,2]
});

我建议另一种方法:创建一个计算属性
sorted
,该属性返回一个排序数组,并在添加或删除项的更改或值时自动更新,请参见:

App.Sorted=Ember.Mixin.create({
排序:函数(){
返回此.get('content').sort(App.sort);
}.property(“@each”)
});
App.venuesController=Ember.ArrayProxy.create(App.Sorted{
内容:[10,11,3,101,500,2]
});

还可以查看关于Ember.js命名约定的博客文章:。所以像控制器这样的实例是小写的,像视图这样的类是大写的