Meteor + Blaze - 如果是其他声明

day*_*oli 28 meteor meteor-blaze

看看这个使用Blaze指南,看起来Blaze支持{{#if}}{{else}}声明,但我还没有看到if-else语句的例子.Blaze是否支持此功能?或者我必须在else块中执行额外的if块,这可能会变得很难看.

我试过了{{else if}},但这给了一个错误.

{{#if en}}{{text.en}}{{else if tc}}{{text.tc}}{{/if}}
Run Code Online (Sandbox Code Playgroud)

Dav*_*don 57

Spacebars使用与把手相同的控制流结构,因此答案与相同.在你的情况下:

{{#if en}}
  {{text.en}}
{{else}}
  {{#if tc}}
    {{text.tc}}
  {{/if}}
{{/if}}
Run Code Online (Sandbox Code Playgroud)

旁注 - 关于玉的一个好处是它支持else if.


有时更好的选择是将逻辑移动到这样的帮助器:

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

  • 我刚试过这个,我不得不为`{{else}}`更改`{{#else}}`. (2认同)

小智 7

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

{{#if isUserProfile}}
    <h3>User Profile</h3>
{{else if isLawyerProfile}}
    <h3>Lawyer Profile</h3>
{{else}}
    <h3>Test</h3>
{{/if}}
Run Code Online (Sandbox Code Playgroud)

参考链接:GitHub Else If 问题解决


tom*_*dox 5

继@David Wheldon 的出色回答之后,还值得注意的是,您可以将参数从 Blaze 模板传递给 JavaScript 辅助函数。

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

    {{#if isSelected region customerCompany}}
        <option value={{region._id}} selected>{{region.name}}</option>
    {{else}}
        <option value={{region._id}}>{{region.name}}</option>
    {{/if}}
Run Code Online (Sandbox Code Playgroud)

然后在js文件中:

isSelected: function (region, customer) {

    return customer.salesRegionId === region._id;
},
Run Code Online (Sandbox Code Playgroud)

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