我正在努力做我认为应该是一项非常简单的任务,但在过去一小时内未能这样做。如果用户属性与值匹配,我想默认选择一个选项。
<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
我不明白为什么这么简单的东西似乎无法实现。我错过了什么吗?
答案 0 :(得分:32)
以下是Spacebars中 {{#if}}
语句的概述
当然,最简单的实现是当作用域对象具有一个评估为布尔值的属性
例如,如果你有:
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>
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">×</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);
}
);
答案 1 :(得分:5)
试试这个:
在你的模板中:
<option value={{key}} selected={{isSelected currentUser.property key}}>
然后让你的助手返回一个布尔值。
有关此主题的更多信息,请访问:https://github.com/meteor/meteor/wiki/Using-Blaze#conditional-attributes-with-no-value-eg-checked-selected
答案 2 :(得分:1)
虽然空格键不支持相等,但此方法用于检查相等性
你可以使用这样的东西
public static String getFormatedSize(Context activityContext, long size)
{
return android.text.format.Formatter.formatShortFileSize(activityContext, size);
}
例如
{{#if chkeq variable value}}
至少它对我有用
其中chkeq是全球帮手, 这就是这样的事情
{{#if chkeq applicationStatus "Draft"}}