这是预期的行为吗?
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
正在项目控制器下的每个视图/组件上调用,弄乱了更多内容。当对象移动时,如何确保我需要的属性和子视图保持不变?
答案 0 :(得分:1)
由您决定如何将更改应用于州。如果您通过物业订购,订单将在物业更改后立即更改。如果你想在触发重新排序之前等待某事发生,我会使用buffered proxy pattern.我编辑你的jsbin作为例子。 http://jsbin.com/zopelu/1/
编辑我错过了关于控制器被销毁和重新创建的部分。我认为这个bug是在1.7和几乎fixed
中引入的