Проверить равенство в космических кораблях?
Я пытаюсь сделать то, что, по моему мнению, должно быть очень простой задачей, но не смог сделать этого в последний час. Я хочу выбрать опцию 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;
}