Проверить равенство в космических кораблях?

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

<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

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

3 ответов


попробуйте это:

в вашем шаблоне:

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

затем ваш помощник вернет логическое значение.

подробнее по теме здесь: https://github.com/meteor/meteor/wiki/Using-Blaze#conditional-attributes-with-no-value-eg-checked-selected


краткий обзор {{#if}} заявления в Spacebars

свойства

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

например, если бы у вас было:

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

тогда вы можете оценить, если блок, как это:

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.


хотя spacebars не поддерживает равенство, этот метод работает для проверки равенства

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

{{#if chkeq variable value}}

пример

{{#if chkeq applicationStatus "Draft"}}

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

где chkeq является глобальным помощником, что идет что-то вроде этого

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