Meteor Handlebars:#if this equals - 用helperfunction加载不同的模板

时间:2013-07-02 21:16:24

标签: meteor handlebars.js

我对Meteor很陌生,只是尝试使用Transitioner构建我的第一个流星应用程序。

所以我想要做的是在传递给另一个模板的字符串等于某个东西时加载不同的模板。 HTML代码:

<template name="onePage">
  {{#if itIs "teams"}}
    {{> teams}}
  {{/if}}
  {{#if itIs "players"}}
    {{> players}}
  {{/if}}
</template>
<template name="teams">
  <h2>These are the TEAMS</h2>
</template>
<template name="players">
  <h2>These are the PLAYERS</h2>
</template>

JS代码:

Template.onePage.itIs = function(passed) {
  return this === passed;
};

由于某种原因,这不起作用,我只是不明白为什么。 唯一的一点是,传递给onePage模板的“this”是一些字符串(来自URL)。如果这个字符串是“团队”我想加载团队模板,如果它是“玩家”我想加载玩家模板。

就这么简单! : - )

不幸的是我无法解决这个简单的问题。

希望你们了解我的问题,你们可以提供帮助!

最好的问候 帕特里克

1 个答案:

答案 0 :(得分:1)

this回调中的Template.onePage.itIs是什么?

如果您将其更改为会话(例如,您从URL设置,可能使用Meteor Router),那么代码可能会正常工作!

因此,例如,/ teams URL会将名为showThisPage的session设置为'teams',而/ players URL会将showThisPage会话设置为'players',而Template.onePage.itIs会检查此会话的传递值是不是。

像这样的东西(我只是直接输入堆栈溢出而不测试它,但它应该工作):

Meteor.Router.add({ 
   '/teams': function() { Session.set('showThisPage', 'teams'); }, 
   '/players': function() { Session.set('showThisPage', 'players'); } 
});

Template.onePage.itIs = function(passed) {
  return Session.get('showThisPage') === passed;
};

没有像我说的那样进行测试,但它应该指向正确的方向。

(而不是使用会话,您只需使用Meteor.Router.page(),但您可以在Meteor Router page上阅读所有相关内容。)