Meteor JS - 在特定模板上显示 DOM 个元素

Meteor JS - showing DOM elements on specific templates

我用 meteor js 开发了我的第一个应用程序,我需要有关在特定模板上显示元素的建议。我有 header 用于所有模板和内容 div,其中模板与 iron router 切换。我在 header 上有两个按钮,它们不会在某些模板上显示,所以我必须在特定模板上 hide/show 它。

现在我为附加到主 div onload 的每个模板辅助函数创建了。在该函数中有一些 jQuery hide() 和 show() 函数。我觉得这不是最好的解决方案,我很好奇是否有人对不同模板上的 show/hide 元素使用更好的方法。

在不知道实际 use-case(根据模板显示和隐藏的内容)的情况下提出建议有点困难。

一种方法是为每个模板创建多个布局并根据路线映射到正确的模板:

this.route('home', {
    path: '/',
    template: 'home',
    layoutTemplate: 'homeLayout'
});

您也可以通过路由器为模板设置数据上下文,并将其放置在 CSS 中(因此它不会与 header 模板相关联)。

 this.route('posts', {
  path: '/posts',
  data: function() {
    var foo = 'something';
    return foo;
  }
});

您还可以为每条路线设置一个 session 变量,以便您的 header 助手可以访问 hide/show 基于 session 变量中的内容。

Template.header.helpers({
    someClass: function() {
        var someClass = Session.get('someClass');
        if (someClass) {
          return someClass;
        }
    }
})

在 Meteor 中,您通常不需要执行附加到 div onload 等操作。

假设您的 header 有 3 个项目,其中一个始终存在,还有两个按钮:(为清楚起见,省略了 bootstrap 标记)

<Template name="header">
  <ul>
    <li>Menu item</li>
  </ul>
  <button>Button 1</button>
  <button>Button 2</button>
</template>

然后你可以简单地为header定义一个助手:

Template.header.helpers({
  showButtons: function(){
     return (some logic that evaluates to true or false);
  }
});

然后将你的header修改为:

<Template name="header">
  <ul>
    <li>Menu item</li>
  </ul>
    {{#if showButtons}}
      <button>Button 1</button>
      <button>Button 2</button>
    {{/if}}
</template>

没有 jQuery,没有 DOM 操纵,没有大惊小怪,如果逻辑中的某些条件发生变化并且您需要 show/hide 按钮时完全反应同一条路线。