Meteor:在每个语句中访问模板助手

时间:2015-11-28 21:25:47

标签: html meteor spacebars

因此,如果我有一个模板并且我为该模板定义了一些助手,我可以在模板中正常使用它们,但是如果我尝试在{{#each whatever}}内使用它,则会给我一个错误。见这个例子:

 {{#unless pollIsOpenHelper}}
  <p>This poll closed on {{formatDate time_poll_closed}}.</p>
{{/unless}}

<table>
  {{ #each indexedArray choices }}
    <tr>
      <td><span class="votes">{{ votes }}</span></td>
      <td><span class="text">{{ text }}</span></td>
      <td><a href="#" class="vote" data-id="{{ _index }}"><button>Vote for this option</button></a></td>
    </tr>

    {{#unless pollIsOpenHelper}}
      <p>CLOSED.</p>
    {{/unless}}

  {{ /each }}
</table>

{{#unless}}内的上述帮助程序工作正常,仅在轮询关闭时显示消息。但是,如果我尝试同样在下面的{{#each}}内显示消息,则帮助程序不起作用并始终显示消息。控制台给了我:Exception in template helper: TypeError: Cannot read property 'poll_is_open' of undefined

编辑:这是帮助代码:

  Template.poll.helpers({

    pollIsOpenHelper: function() {
      var poll_is_open = Polls.findOne({_id: this._id}).poll_is_open;

      return poll_is_open;
    },

  });

2 个答案:

答案 0 :(得分:2)

您的问题是由其他人声明的 // String nameAddressArray[] = new String[7]; 循环内部数据上下文更改引起的。这导致each成为你期望的其他东西。

假设您使用的是Meteor this._id版本,则可以使用 {{#each thing in iterable}}空格键构造来解决此问题,该构造不会覆盖数据上下文。

您可以按如下方式使用它:

1.2.x+

如果您不使用Meteor {{#each array in indexedArray choices}} //doStuff {{/each}} 版本,则可以修改助手以获取参数,如下所示:

1.2.x+

您的模板中将调用以下内容:Template.poll.helpers({ pollIsOpenHelper: function(poll) { var poll_is_open = Polls.findOne({_id: poll._id}).poll_is_open; return poll_is_open; }, }); 块之外的{{#unless pollIsOpenHelper this}}#each内的{{#unless pollIsOpenHelper ../}}

答案 1 :(得分:0)

您可以从每个内部调用Template.instance()来获取您的实例和帮助程序。