Meteor:在Mongo数据库查询中隐藏/显示模板

时间:2016-01-27 04:07:27

标签: javascript mongodb templates meteor

我正在寻找一种方法(或方法)根据Mongo DB变量的状态显示或隐藏Meteor Handlebars html模板。换句话说,如果用户提交特定双关语的评级,那么该评级将存储在Mongo集合中,并且“评级”模板应隐藏自身。因此,“隐藏”可以由许多条件触发,例如在用户第一次提交评级后立即触发,或者如果用户恰好加载先前评级的双关语,则触发。

我最初使用Session的尝试似乎已经错过了标记或者没有点击。

Javascript

Session.setDefault('rated', 'notRated');

function ratingDisplay () {
  var whetherRated = userHasRated();
  // userHasRated() is a function that returns boolean 'true' is the user has rated or boolean 'false' if not
  if (whetherRated === true) {
    Session.set('rated', 'rated');
  } else {
    Session.set('rated', 'notRated');
  }
}

Handlebars.registerHelper('isRated', function (input) {
  return Session.get('rated');
});

UI.body.helpers({
  isRated: function (rating) {
    return Session.equals('rated', rating);
  }
});

HTML:以{{/ if isRated'notRated'}}开头的三行是问题所在。

<template name="ShowTake">
  <div class="container">
    <h1 class="item">take a pun</h1>
      {{#with randomPun}}
        <p class="item">{{prompt}}</p>
        <p class="item">{{answer}}</p>
      {{/with}}
      {{#if isRated 'notRated'}}
        {{> Rating}}
      {{/if}}
    <button class="item btn" data-action="getPun">more pun</button>
    <button class="item btn clickChangesPage" data-page="showMain">return</button>
  </div>
</template>

经过测试,我已经确定“评级”模板显示的是会话变量'rating'的状态。欢迎任何想法。此外,如果我过分复杂的问题,我肯定愿意接受更优雅的答案。

1 个答案:

答案 0 :(得分:0)

首先,为什么不使用notRatedrated代替true / false

Session.setDefault('rated', false');

这样的东西

然后做这样的事情。

Tracker.autorun(function(){
  Session.set('rated', userHasRated()); //since this returns true or false
});

然后你可以做这样的帮手。

Template.ShowTake.helpers({
 isRated: function(){
  return Session.get(); //or use a RegisterHelper 
 }
});

然后你的if会是这样的。

{{#if isRated }}
    {{> Rating}}
{{/if}}