【发布时间】:2014-03-14 03:43:16
【问题描述】:
我有一个带有两个出口的应用程序(在 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 在路由器级别重新渲染该模板?还是有什么我遗漏的东西,还有另一种/更好的方法可以做到这一点?非常感谢任何帮助。
【问题讨论】:
-
找到了解决方案。我现在只是扩展一个预定义的路由,相应地设置 isFrontpage 和 this.render。
标签: ember.js ember-data