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



这是预期的行为吗?

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。当然,任何控制器属性(而不是模型的属性)都不再存在(我的意思是,这是一个新对象,所以任何没有理由存在的属性都是未定义的)。

您可以在这个jsBin中看到这种情况。

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

如何将更改应用于状态取决于您。如果按属性排序,则属性一更改,顺序就会立即更改。如果你想在触发重新排序之前等待一些事情发生,我会使用缓冲代理模式。我编辑了你的jsbin作为一个例子。http://jsbin.com/zopelu/1/

EDIT我错过了关于控制器被销毁和重新创建的部分。我认为这个错误是在1.7中引入的,几乎修复了

最新更新