Meteor + Blaze - If else 语句

Posted

技术标签:

【中文标题】Meteor + Blaze - If else 语句【英文标题】:Meteor + Blaze - If else statement 【发布时间】:2015-02-14 15:32:59 【问题描述】:

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

我试过else if,但出错了。

#if entext.enelse if tctext.tc/if

【问题讨论】:

【参考方案1】:

当前版本的 Blaze 支持 else 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

【讨论】:

【参考方案2】:

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

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

    #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 关键字的含义变化而引起混淆。

【讨论】:

【参考方案3】:

空格键使用与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>

【讨论】:

感谢您的回答。但是如果我有很多很多 else if 语句怎么办?这样做会很丑陋。没有其他选择吗? 单独使用模板,别无选择。我建议添加一个模板助手来返回您需要的值。 我现在不知道该怎么做。我会阅读它。感谢您的回答和澄清!我已经用完了今天的所有选票。明天会 +1! 我刚刚尝试过这个,我不得不将#else 更改为else 谢谢@canotto90 - 我刚刚修正了这个错误。

以上是关于Meteor + Blaze - If else 语句的主要内容,如果未能解决你的问题,请参考以下文章

带有 Meteor 的 Blaze-Apollo,观察者不会触发变量更改的订阅

使用 Meteor 和 blaze 在掌上电脑上正确加载数据

Meteor Blaze 访问 Template.onCreated 内的 Template.contentBlock

使用 Blaze 和空格键访问 Meteor 应用程序中的嵌套对象

Angular、React 和 Blaze(客户端 Meteor)之间的主要设计差异? [关闭]

使用 blaze (meteor) 模板引擎在 Iron-icons 中设置的 Polymer 1.0 默认图标不工作