我有一个带有两个出口的应用程序(在application.hbs中),其中第二个呈现无论您在哪条路线上显示的视频网格,但显示的视频可能会发生变化。模型的重要部分“
App.Video = DS.Model.extend({
...
frontpage: DS.attr('boolean'),
...
});
因此,当我在大多数路线上时,我想要显示带有frontpage == true的视频,并且在一条路线上我想要显示所有视频,无论首页是什么。 我似乎已经完成了一半工作。 重要的路线如下:
App.Router.map(function () {
this.resource('videos', { path: 'videos/' }, function () {
this.route('video', { path: ':video_id' });
});
...
我的videos.index
模板(我在第二个命名插座中渲染)看起来像这样:
{{#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在路由器级别上重新呈现该模板?或者有什么我缺少的东西,有另一种/更好的方法来做到这一点?任何帮助都非常感谢。
答案 0 :(得分:2)
好的,我找到了解决方案。问题是,ember只加载了一次ApplicationRoute,因此再也没有调用renderTemplate方法。我只是创建了一个Route-object,所有其他路由都会扩展,所以右边的renderTemplate被调用为正确的路径。