当ArrayController重新排序时,Ember itemController得到重新实例化

时间:2014-10-27 20:39:02

标签: javascript ember.js

这是预期的行为吗?

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正在项目控制器下的每个视图/组件上调用,弄乱了更多内容。当对象移动时,如何确保我需要的属性和子视图保持不变?

1 个答案:

答案 0 :(得分:1)

由您决定如何将更改应用于州。如果您通过物业订购,订单将在物业更改后立即更改。如果你想在触发重新排序之前等待某事发生,我会使用buffered proxy pattern.我编辑你的jsbin作为例子。 http://jsbin.com/zopelu/1/

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

中引入的