更改路线时重新渲染模板

时间:2014-02-14 16:56:14

标签: ember.js ember-data

我有一个带有两个出口的应用程序(在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我有同样的情况,只有intocontroller适用于application路线。

所以任何人都知道如何让ember在路由器级别上重新呈现该模板?或者有什么我缺少的东西,有另一种/更好的方法来做到这一点?任何帮助都非常感谢。

1 个答案:

答案 0 :(得分:2)

好的,我找到了解决方案。问题是,ember只加载了一次ApplicationRoute,因此再也没有调用renderTemplate方法。我只是创建了一个Route-object,所有其他路由都会扩展,所以右边的renderTemplate被调用为正确的路径。