在Spacebars中检查是否相同?

时间:2014-07-09 10:00:51

标签: if-statement meteor equals conditional-statements spacebars

我正在努力做我认为应该是一项非常简单的任务,但在过去一小时内未能这样做。如果用户属性与值匹配,我想默认选择一个选项。

<select name="myName">
  {{#each addKeys myTable}} <!-- addKeys creates variables for keys and values -->
    <option value="{{key}}" {{#if currentUser.property === key}}selected="selected"{{/if}}>{{value}}</option>
  {{/each}}
</select>

现在我觉得这很容易实现。但事实证明,Spacebars不允许除否定感叹号之外的条件运算符,因此等号无关紧要。然后我尝试了一些可怕的尝试:

在模板myTemplate中:

<select name="myName">
  {{#each addKeys myTable}}
    <option value="{{key}}" {{isSelected currentUser.property key}}>{{value}}</option>
  {{/each}}
</select>

mytemplate.js

Template.myTemplate.helpers({
  isSelected: function(v1, v2) {
    if (v1 === v2)
      return "selected=\"selected\"";
    return '';
  }
});

这个代码不仅可怕,看起来很糟糕,而且不起作用:

Exception in Meteor UI: String contains an invalid character

我不明白为什么这么简单的东西似乎无法实现。我错过了什么吗?

3 个答案:

答案 0 :(得分:32)

以下是Spacebars中 {{#if}}语句的概述

属性

当然,最简单的实现是当作用域对象具有一个评估为布尔值的属性

例如,如果你有:

var item = {
  text: 'hello',
  checked: false
};

然后你可以像这样评估一个if块:

class="{{#if checked}}checked{{/if}}"

功能

我们也可以在这里评估一个函数。我们可以向辅助函数添加一个函数,而不是向函数添加函数,它将继承传递给它的项目的datacontext。所以,如果我们有以下帮助者:

Template.item.helpers({
    saysHi: function() {
      return this.text === "hi";
    }
});

然后我们可以运行以下代码:

<template name="item">
   {{text}}
   {{#if saysHi}} - Hi Back {{/if}}
</template>
  

Note:帮助程序的实现可以this访问当前数据上下文。

带参数的函数

您还可以将任意数量的参数传递给辅助函数,如下所示:

模板:{{frob a b c verily=true}}
帮手电话:frob(a, b, c, Spacebars.kw({verily: true}))

当应用于我们的if块时,我们可以执行以下操作:

{{#if equals owner currentUser._id}}
    <button class="delete">&times;</button>
{{/if}}

然后将equals添加到我们的模板助手中,如下所示:

Template.item.helpers({
    equals: function(v1, v2) {
        return (v1 === v2);
    }
});

环球助手

由于这是一个在任何地方都有用的通用方法,我们应该将它添加到每个模板而不是重新创建它。

  

Note:要创建可在任何模板中使用的帮助器,请使用Template.registerHelper

Template.registerHelper('equals',
    function(v1, v2) {
        return (v1 === v2);
    }
);

Here's a working Demo in MeteorPad that includes one of each of the types of IF's constructed here

答案 1 :(得分:5)

试试这个:

在你的模板中:

<option value={{key}} selected={{isSelected currentUser.property key}}>

然后让你的助手返回一个布尔值。

有关此主题的更多信息,请访问:https://github.com/meteor/meteor/wiki/Using-Blaze#conditional-attributes-with-no-value-eg-checked-selected

答案 2 :(得分:1)

虽然空格键不支持相等,但此方法用于检查相等性

你可以使用这样的东西

public static String getFormatedSize(Context activityContext, long size) 
    {
        return android.text.format.Formatter.formatShortFileSize(activityContext, size);

    }

例如

{{#if chkeq variable value}}

至少它对我有用

其中chkeq是全球帮手, 这就是这样的事情

{{#if chkeq applicationStatus "Draft"}}