【问题标题】:Check for equality in Spacebars?检查空格键是否相等?
【发布时间】:2014-08-30 07:12:44
【问题描述】:

我正在尝试做我认为应该是一项非常简单的任务,但在过去的一个小时里一直没有这样做。如果用户属性与值匹配,我想默认选择一个选择选项。

<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-statement meteor equals conditional-statements spacebars


    【解决方案1】:

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

    属性

    当然,最简单的可能实现是当作用域对象具有计算为布尔值的属性时

    例如,如果您有:

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

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

    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:助手的实现可以以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

    【讨论】:

    • 非常感谢您!
    【解决方案2】:

    试试这个:

    在您的模板中:

    &lt;option value={{key}} selected={{isSelected currentUser.property key}}&gt;

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

    这里有更多关于这个主题的信息:https://github.com/meteor/meteor/wiki/Using-Blaze#conditional-attributes-with-no-value-eg-checked-selected

    【讨论】:

      【解决方案3】:

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

      你可以使用这样的东西

      {{#if chkeq variable value}}
      

      例子

      {{#if chkeq applicationStatus "Draft"}}
      

      至少对我有用

      其中 chkeq 是一个全局助手, 是这样的

      chkeq:function(a,b){
          if(a==b){
            return true;}
      else return false;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-16
        • 2022-11-01
        • 2017-12-26
        • 2011-01-19
        • 2010-11-16
        • 2011-09-08
        • 2014-06-17
        • 2015-08-21
        相关资源
        最近更新 更多