gpt4 book ai didi

javascript - Ember.js - 添加基本 Controller 使模型数据在模板中不可用

转载 作者:行者123 更新时间:2023-12-02 17:22:48 25 4
gpt4 key购买 nike

我有嵌套路由,例如:

this.resource('collections', { path: '/collections' }, function() {
this.resource('collection', { path: '/:collection_id' }, function() {
this.resource('movies', { path: '/movies' }, function() {
this.resource('moview', { path: '/:movie_id' });
});
});
});

如果我创建一条基本路线,例如:

App.MovieRoute = Em.Route.extend({

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

该路线是通过电影模板中的链接访问的。

我的模板可以直接访问模型属性:

<script type="text/x-handlebars" data-template-name="movie">
{{movieName}}
</script>

但是如果我添加一个基本 Controller :

App.MovieController = Ember.ArrayController.extend({
});

并将 setupController 添加到模型中: App.MovieRoute = Em.Route.extend({

    renderTemplate: function() {
this.render({outlet: 'movies'});
},

setupController: function(controller, model) {
}
});

我无法再访问模板中的变量 movieName(它未定义)。如果我添加 Controller 但不实现设置 Controller ,则会失败并显示错误“未定义不是函数”。我可以向电影 Controller 添加一些内容,以便它不会干扰对模板中变量的访问吗?我尝试添加一个在 Controller 中进行 super 调用的 init,但没有运气:

App.MovieController = Ember.ArrayController.extend({
init: function() {
this._super();
}
});

最佳答案

正如 Meori Oransky 在他的帖子中指出的那样,您覆盖了 setupController 的默认功能。 setupController 默认情况下会实例化 Controller 的模型,因此您需要确保首先执行此操作。

您希望您的电影路线如下所示:

App.MovieRoute = Em.Route.extend({
setupController: function(controller, model) {
controller.set('model', model);
},
renderTemplate: function() {
this.render({outlet: 'movies'});
}
});

顺便说一句,setupController 使您可以更加灵活地处理模型中发生的情况。您可以操纵数据、验证条件并在必要时重新路由。您可以指定要使用的 Controller 等。但至少,您需要始终设置 Controller 的模型,否则您将在模板中丢失此 Hook 。

关于javascript - Ember.js - 添加基本 Controller 使模型数据在模板中不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23766854/

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