【问题标题】:Re-render template when changing route更改路线时重新渲染模板
【发布时间】: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 中我也有相同的,只是intocontroller 用于application 路由。

所以任何人都知道如何让 ember 在路由器级别重新渲染该模板?还是有什么我遗漏的东西,还有另一种/更好的方法可以做到这一点?非常感谢任何帮助。

【问题讨论】:

  • 找到了解决方案。我现在只是扩展一个预定义的路由,相应地设置 isFrontpage 和 this.render。

标签: ember.js ember-data


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2018-04-20
    • 2017-03-13
    • 1970-01-01
    • 2020-06-27
    • 2017-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-17
    相关资源
    最近更新 更多