gpt4 book ai didi

javascript - Ember.js: 'init' Hook 在 ObjectController 上被调用两次

转载 作者:行者123 更新时间:2023-11-30 17:29:41 25 4
gpt4 key购买 nike

我在摆弄 Ember 时遇到了一些让我困惑的事情。

我有一个 ArrayController (Index) 和一个项目 Controller (Post)。对于 Post 项 Controller 上的 init Hook ,我让它向控制台发送调试行。每个帖子都会发送两次此调试语句,我不明白为什么。

JSBin 上的代码: http://emberjs.jsbin.com/momikuto/14/edit

HTML:

<script type="text/x-handlebars">
{{outlet}}
</script>

<script type="text/x-handlebars" data-template-name="index">
{{each controller itemViewClass="App.PostView"}}
</script>

<script type="text/x-handlebars" data-template-name="post">
POST {{id}}<br />
</script>

JavaScript:

App = Ember.Application.create();

App.IndexController = Ember.ArrayController.extend({
itemController: 'post',
templateName: 'index',

addPost: function (id) {
this.pushObject(App.PostController.create({ id: id }));
}
});

App.PostController = Ember.ObjectController.extend({
debug: function () {
console.log('init for post ' + this.get('id'));
}.on('init')
});

App.IndexView = Ember.View.extend({
didInsertElement: function () {
this.get('controller').addPost(1);
this.get('controller').addPost(2);
}
});

App.PostView = Ember.View.extend({
tagName: 'span',
templateName: 'post'
});

输出:

init for post 1
init for post 1
init for post 2
init for post 2

如果我删除帖子 2 并只使用帖子 1,我只会得到 init for post 1 两次。如果我添加一个帖子,我会得到所有三个帖子两次。 ArrayControl 中的 Post 对象的数量似乎与问题无关。


我在 Ember Github 上看到一篇帖子,但在被认为不是 Ember 问题后它被关闭了。有什么想法吗?

最佳答案

您正在创建它两次。您在 IndexController 上设置了 itemController,实际上您是在 addPost 函数中创建 Controller 。

除了一些奇怪的边缘情况外,您永远不需要自己创建 Controller 实例。当您pushObject 时,Ember 会为您创建itemControler 实例,因此您无需手动创建

关于javascript - Ember.js: 'init' Hook 在 ObjectController 上被调用两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23401640/

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