流星铁路由器布局渲染

Mic*_*sak 6 node.js meteor meteorite iron-router

我们已经实现了一个布局,其中主要内容位于动态侧边栏中.我们定义如下layoutTemplate:

<template name="layout">
  {{> content}}

  {{> leftbar}}

  {{> rightbar}}

  <nav class="navigation">
      {{#if currentUser}}
          {{> navigation_logged_in}}
      {{else}}
          {{> navigation_logged_out}}
      {{/if}}
  </nav>
</template>
Run Code Online (Sandbox Code Playgroud)

我们在布局模板中包含例如右栏模板.

<template name="rightbar">
  <aside class="rightbar">
      <button id="closeRightBar" class="close-cross"></button>

      {{yield 'rightbar'}}
  </aside>
</template>
Run Code Online (Sandbox Code Playgroud)

右栏模板包括右栏收益率,我们将特定内容输入到该栏中.

我们已经实现了以下RouteController:

UserShowRouter = RouteController.extend({

  before: function() {
      var username = this.params.username;
      if(App.subs.user) {
          App.subs.user.stop();
      }
      App.subs.user = Meteor.subscribe('user', username);
  },

  waitOn: function () {
    return Meteor.subscribe('user');
  },

  data: function() {
      return Meteor.users.findOne({'profile.username': this.params.username});
  },

  action: function() {
      this.render('profile', {to: 'rightbar'});
  }

});
Run Code Online (Sandbox Code Playgroud)

我们想要实现的是,例如,profile模板被生成到rightbaryield中,并且随着数据的变化得到更新并重新呈现.

现在的问题是侧边栏是动态动画,显示和隐藏的.现在,每次profile重新渲染模板时,layout模板都会重新渲染.这是为什么?我们认为产量区域的目的之一是整个站点不需要重新渲染.现在,当重新渲染布局时,动画的整个css将重新设置为原始值.

我们现在尝试了几种不同的方法,但它们似乎都不是一个好的和干净的解决方案.有没有办法保持layout模板不被重新渲染,只是保持屈服区域和模板更新?任何建议或替代方案将受到高度赞赏.

Jer*_* S. 3

据我了解,重新渲染模板“冒泡”并导致重新渲染其父模板的行为并不特定于iron-router或代码的实现方式,而是Spark固有的。据我从其文档中可以看出,Iron-router 的 {{yield}} 模式不会改变这种行为。

好消息是 Spark 即将被更新、更细粒度的渲染引擎取代,目前代号为“Spacebars”,这应该会减轻人们的担忧。

以下是新渲染系统的预览:

https://github.com/meteor/meteor/wiki/New-Template-Engine-Preview

一周前的这篇演讲也很好地描述了新渲染引擎带来的好处(虽然相当长,但在前 5 分钟内给出了概述):

https://www.youtube.com/watch?v=aPf0LMQHIqk

至于您今天的选择,您可以:

a) 使用 {{#constant}} 和 {{#isolate}} 参数尝试限制重新渲染。

b) 从开发分支工作,如上面的链接所述:

您可以使用 template-engine-preview-4 发布标签(使用meteor --release template-engine-preview-4 运行您的应用程序)来使用当前正在进行的代码版本,或者通过查看 shark分支(这是一个内部代号)。

c) 最重要的是,如果您的项目的时间框架允许,则允许重新渲染继续进行,直到 Meteor 1.0 发布并且“Spacebars”驻留在主分支上 - 听起来这还需要 1-3 个月的时间。