Javascript ArrayController重新排序时,将重新实例化Ember itemController

Javascript ArrayController重新排序时,将重新实例化Ember itemController,javascript,ember.js,Javascript,Ember.js,这是预期的行为吗 App.PostsController = Ember.ArrayController.extend({ itemController: 'post', sortProperties: ['date'], sortAscending: false }); App.PostController = Ember.ObjectController.extend({ init: function () { console.log('post controlle

这是预期的行为吗

App.PostsController = Ember.ArrayController.extend({
  itemController: 'post',
  sortProperties: ['date'],
  sortAscending: false
});

App.PostController = Ember.ObjectController.extend({
  init: function () {
    console.log('post controller init');
    this.set('propertyNotIncludedInModel', true);
  }
});
假设我有一个帖子列表,我内联编辑了其中一个帖子的日期。
PostsController
将对列表重新排序。一旦它这样做,控制台将记录日期更改的那个运行了
init
。当然,任何控制器属性(不是模型属性)都不再存在(我的意思是,它是一个新对象,因此任何没有理由存在的属性都是未定义的)

你可以在这本书中看到这一点


这似乎大错特错。我觉得这打破了与现实生活的任何类比。如果我有一堆东西放在桌子上,我想对它们重新排序,我不会破坏我想移动的那个,然后重新创建它。恩伯对这种行为的解释是什么?我该如何处理?我需要在数组中位置可能改变的对象上设置控制器属性。更好的是,我需要由该对象表示的视图及其组件来持久化并维护它们自己的状态和属性。当前,item controller下的每个视图/组件都调用了
didInsertElement
,这会把事情搞得更糟。如何确保对象移动时所需的属性和子视图保持不变?

如何将更改应用于状态取决于您。如果您是按属性排序的,则该属性一更改,顺序就会更改。如果您想在触发重新排序之前等待某些事情发生,我将使用我编辑的jsbin作为示例


编辑我错过了关于控制器被销毁和重新创建的部分。我认为这个bug是在1.7中引入的,而且几乎

我知道顺序会马上改变——我对此没有问题。这是订单变更的实施方式。移动的项目控制器似乎被销毁,然后重新创建,然后插入到正确的位置。这对我来说似乎是错误的。谢谢你,在这个问题上找到了很好的答案。他们正在讨论其他一些方法,但听起来可能是相同的根本原因。如果在此期间没有其他人找到更确切的答案,我明天就会接受你的答案。