在Meteor中使用{{#each element}}内的函数?

时间:2015-09-21 16:18:29

标签: meteor meteor-blaze

在Meteor项目中,我有一组文档,可以有两种格式之一。为简化起见,给定文档可能具有type属性或label属性。我想显示这是一个多选元素,使用它们识别它们的任何属性。

这是一个有效的例子:

HTML

<body>
  {{> test}}
</body>

<template name="test"> 
  <select name="elements" size="2">
    {{#each elements}}
      <option value="{{id}}">{{id}}: {{type}}{{label}}</option>
    {{/each}}
  </select>
</template>

的JavaScript

Template.test.helpers({
  elements: function () {
    return [ 
      { id: 1, type: "type" }
    , { id: 2, label: "label" }
    ]
  }
})

这很愉快地显示:

1: type
2: label

然而,这是一种简化。我想要显示的实际数据比这更复杂。我宁愿不将所有连接逻辑放入HTML模板中。我更愿意调用JavaScript函数,将其传递给当前文档,并获取要显示的字符串。类似的东西:

<option value="{{id}}">{{functionToCall_on_this}}</option>

我怎么能用Meteor做到这一点?

1 个答案:

答案 0 :(得分:1)

回答我自己的问题,我发现我可以更改我的模板以包含这一行...

<option value="{{id}}">{{id}}: {{string}}</option>

我的帮助者条目使用map方法:

Template.test.helpers({
  elements: function () {
    data = [ 
      { id: 1, type: "type" }
    , { id: 2, label: "label" }
    ]

    return data.map(function (item, index, array) {
      var string = item.type || item.label
      return { id: item.id, string: string }
    })
  }
})