gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 00:52:32 25 4
gpt4 key购买 nike

这是预期的行为吗?

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。当然,任何 Controller 属性(不是模型属性)都不再存在(我的意思是,它是一个新对象,因此任何没有理由的属性存在未定义)。

您可以在 jsBin 中看到这种情况发生.

这似乎是非常错误的。我觉得它打破了与现实生活的任何类比。如果我的 table 上有一堆对象并且我想对它们重新排序,我不会销毁我想要移动的对象然后重新创建它。 Ember 的这种行为的理由是什么?我该如何处理?我需要在数组中的位置可能会改变的对象上设置 Controller 属性。更好的是,我需要该对象表示的 View 及其组件来持久保存并维护它们自己的状态和属性 - 当前在项目 Controller 下的每个 View /组件上调用 didInsertElement ,这会搞乱事情更多。如何确保当对象移动时我需要的属性和 subview 仍然存在?

最佳答案

如何将更改应用到状态取决于您。如果您按酒店订购,则酒店更改后订单也会随之更改。如果您想在触发重新排序之前等待某些事情发生,我会使用 buffered proxy pattern.我编辑了你的 jsbin 作为示例。 http://jsbin.com/zopelu/1/

编辑我错过了有关 Controller 被销毁和重新创建的部分。我认为这个 bug 是在 1.7 中引入的,几乎 fixed

关于javascript - 当 ArrayController 重新排序时,Ember itemController 被重新实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26596423/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com