if-statement - 检查空格键是否相等?

标签 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>

现在我认为这足够简单,可以实现。但事实证明,空格键不允许除否定感叹号之外的条件运算符,因此等号是不可能的。然后我为了尝试而尝试了一些可怕的事情:

在模板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

我不明白为什么这么简单的事情似乎不可能实现。我是不是错过了什么?

最佳答案

以下是空格键中{{#if}}语句的概述

属性

当然,最简单的实现是作用域对象具有计算结果为 bool 值的属性

例如,如果您有:

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

然后你可以像这样评估 if block :

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

函数

我们也可以在这里评估一个函数。我们可以向助手添加一个函数,而不是向项目添加函数,它将继承传递给它的项目的数据上下文。因此,如果我们有以下助手:

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

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

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

Note: The helper's implementation can access the current data context as this.

带参数的函数

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

模板:{{frob a b c verily=true}}
辅助调用:frob(a, b, c, Spacebars.kw({verily: true}))

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

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

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

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

通用助手

由于这是一个可以在任何地方使用的通用方法,因此我们应该将其添加到每个模板中,而不是重新创建它。

Note: To create a helper that can be used in any template, use 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

关于if-statement - 检查空格键是否相等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24650658/

相关文章:

javascript - 使用 querySelector 在 for 循环中获取属性

java - 如何重写 equals 方法

java - 为什么这个文本比较失败?

android - 无法让我的 meteor 应用程序连接到我的服务器。短暂显示 "connected",转到 "connecting"和 "waiting"

java - 使用 new 运算符在 Java 中进行整数缓存

android - IfElse 或正则表达式

if-statement - SQL Server Express IF 语句

javascript - 使 HTML 表单提交到不同的地方

mongodb - 从 Meteor 集合中获取随机文档

rest - 如何使用 Meteor 公开 RESTful Web 服务