Meteor + Blaze - 如果是其他声明

时间:2014-12-16 10:39:19

标签: meteor meteor-blaze

查看此Using Blaze指南,Blaze似乎支持{{#if}}{{else}}语句,但我没有看到if-else语句的示例。 Blaze是否支持此功能?或者我必须在else块中做一个额外的if块,这可能会变得难看。

我尝试了{{else if}},但这给出了错误。

{{#if en}}{{text.en}}{{else if tc}}{{text.tc}}{{/if}}

3 个答案:

答案 0 :(得分:54)

Spacebars使用与handlebars相同的控制流结构,因此答案与this one相同。在你的情况下:

{{#if en}}
  {{text.en}}
{{else}}
  {{#if tc}}
    {{text.tc}}
  {{/if}}
{{/if}}

附注 - jade的一个好处是它支持else if


有时候更好的选择是将逻辑转移到这样的帮手:

Template.myTemplate.helpers({
  textValue: function() {
    if (this.en) {
      return this.text.tc;
    } else if (this.tc) {
      return this.text.tc;
    }
  }
});
<template name="myTemplate">
  <p>{{textValue}}</p>
</template>

答案 1 :(得分:4)

继来自@David Wheldon的优秀答案之后,还值得注意的是,您可以从Blaze模板将参数传递给JavaScript帮助函数。

因此,例如,下面的代码通过使用行isSelected region customerCompany调用helper方法有选择地呈现选择列表的选项:

    {{#if isSelected region customerCompany}}
        <option value={{region._id}} selected>{{region.name}}</option>
    {{else}}
        <option value={{region._id}}>{{region.name}}</option>
    {{/if}}

然后在js文件中:

isSelected: function (region, customer) {

    return customer.salesRegionId === region._id;
},

通常建议使用这种将变量传递给助手的方法,以避免在使用模板时this关键字的含义发生变化时产生的混淆。

答案 2 :(得分:1)

当前版本的Blaze支持其他if - 请参阅下面的示例格式并参考github问题解决方案。

{{#if isUserProfile}}
    <h3>User Profile</h3>
{{else if isLawyerProfile}}
    <h3>Lawyer Profile</h3>
{{else}}
    <h3>Test</h3>
{{/if}}

参考链接:GitHub Else If Issue Resoltion