因此,如果我有一个模板并且我为该模板定义了一些助手,我可以在模板中正常使用它们,但是如果我尝试在{{#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;
},
});
答案 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()
来获取您的实例和帮助程序。