1

我已经在 Ember 上工作了大约一个月,但我仍然对 Ember 中的各种钩子感到困惑。我知道一切的点点滴滴,但无法将它们拼接在一起。我了解模型、beforeModel 和 afterModel 钩子的用法。setupController 挂钩用于什么以及在生命周期中何时调用。还有什么是 renderTemplate 挂钩用于。我一直在使用它来执行每次渲染模板时都应该执行的功能,但是在网上阅读后,我发现当人们想要在插座中渲染另一个模板时使用它,例如:

renderTemplate: function() {
    this.render('favoritePost');
} 

如果我在路由中同时定义了模型钩子和 renderTemplate 钩子,我开始收到错误,之后就没有任何效果了。我在哪里可以做每次加载模板时应该做的事情。我知道我可以使用 didInsertElement 钩子为视图做类似的事情,但我不能在不创建视图的情况下做到这一点吗?

4

2 回答 2

3

最好的办法是让您阅读ember 指南中的路由部分。

setupController 钩子正如其名称所说的那样 - 它使用模型数据设置相关控制器(或控制器,如果您需要它)。模型数据可以来自模型钩子(给定手动 url)或来自链接到帮助器/transitionToRoute 调用 - 因此每次您以任何一种方式输入此路由时都会调用它。默认情况下,它将模型作为“模型”属性附加到隐含的控制器。

renderTemplate 钩子通常仅在您要呈现不是该路由命名约定设置的模板/视图时使用,或者挂钩与约定隐含的控制器不同的控制器。它还可以用于渲染到特定模板中的特定插座。默认情况下,它将使用隐含的控制器作为上下文呈现隐含的视图/模板。

关于您应该在哪里找到代码的问题——因为它显然与视图层有关——你绝对应该把它放在视图中,而不是放在路由器中。如果你坚持把它放在路由器中 - 确保在覆盖这些钩子时调用 this._super() 。

于 2014-03-19T11:09:50.673 回答
0

我在我的一个应用程序中使用了 renderTemplate,我们使用的语法是:

    this.render({
      into: 'viewName',
      outlet: 'outletName'
    });

我使用了您在这条路线中所述的两个钩子,并且没有任何问题。

于 2014-08-05T20:11:41.100 回答