Подтвердить что ты не робот

Проверить равенство в пробелах?

Я пытаюсь сделать то, что, по моему мнению, должно быть очень простой задачей, но не смог этого сделать за последний час. Я хочу выбрать опцию выбора по умолчанию, если свойство пользователя соответствует значению.

<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

Я не понимаю, почему что-то такое простое кажется невозможным. Я что-то не хватает?

4b9b3361

Ответ 2

Вот обзор операторов {{#if}} в Spacebars

Свойство

Конечно, простейшая возможная реализация заключается в том, что объект с областью действия имеет свойство, которое вычисляет логическое значение

Например, если у вас есть:

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>

Примечание: Вспомогательная реализация может получить доступ к текущему контексту данных как 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);
    }
});

Универсальные помощники

Поскольку это общий метод, который может быть полезен где угодно, мы должны добавить его к каждому шаблону, а не воссоздать его.

Примечание: Чтобы создать помощник, который можно использовать в любом шаблоне, используйте Template.registerHelper.

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

Здесь работает демоверсия в MeteorPad, которая включает в себя один из каждого из типов IF, построенных здесь

Ответ 3

Хотя пробелы не поддерживают равенство, этот метод работает для проверки равенства

вы можете использовать что-то вроде этого

{{#if chkeq variable value}}

Пример

{{#if chkeq applicationStatus "Draft"}}

по крайней мере, это сработало для меня