我有一个有两个插座的应用程序(在application.hbs中),第二个插座渲染一个视频网格,无论你在哪条路线上,都会显示出来,但显示的视频可能会改变。模型的重要部分“
App.Video = DS.Model.extend({
...
frontpage: DS.attr('boolean'),
...
});因此,当我在大多数路线上时,我希望在frontpage ==为true的情况下显示视频,而在一条路线上,我希望显示所有视频,而不管frontpage说什么。我似乎让它起了一半的作用。重要的路由如下所示:
App.Router.map(function () {
this.resource('videos', { path: 'videos/' }, function () {
this.route('video', { path: ':video_id' });
});
...我的videos.index模板(我在名为outlet的第二个模板中呈现)如下所示:
{{#each video in controller}}
{{log isFrontPage}}
<!--if we only want to display the frontpage-videos in the grid -->
{{#if isFrontPage}}
<!--show only videos with frontpage = true -->
{{#if video.frontpage}}
{{partial 'video-thumbnails'}}
{{/if}}
{{else}}
<!--show all videos, which will be used for the /videos site-->
{{partial 'video-thumbnails'}}
{{/if}}
{{/each}}isFrontPage是ApplicationController中的一个属性,在正确的路由中设置为true/false。当我最初加载索引路径时,一切都很好,只需要用frontpage==true加载视频,当我切换到/videos路径时,一切都很好,它加载所有的视频。但是,无论我走哪条路,它都是一样的。而且足够有趣的是,即使在/videos路由上显示的视频发生变化,log命令也不再打印任何内容。
此外,我还使用renderTemplate函数来获取功能,类似于VideosIndexRoute中的功能
this.render('videos.index', {
outlet: 'videogrid',
into: 'videos.index',
controller: controller
});在ApplicationRoute中也是如此,只有into和controller用于application路由。
那么有谁知道我如何让ember在路由器级别上重新呈现该模板?或者是我遗漏了什么,还有另一种/更好的方法来做到这一点?任何帮助都是非常感谢的。
发布于 2014-02-15 03:27:40
好吧,我找到了一个解决方案。问题是,ember只加载ApplicationRoute一次,所以renderTemplate方法再也不会被调用了。我只是创建了一个Route-object,所有其他路由都会扩展它,这样就可以为正确的路由调用正确的renderTemplate。
https://stackoverflow.com/questions/21785135
复制相似问题