我正在尝试做我认为应该是一个非常简单的任务,但在过去的一个小时里一直未能做到这一点。如果用户属性与值匹配,我想默认选择一个选择选项。
<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}}
语句的概述
属性
当然,最简单的实现是作用域对象具有计算结果为 bool 值的属性
例如,如果您有:
var item = {
text: 'hello',
checked: false
};
然后你可以像这样评估 if block :
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: The helper's implementation can access the current data context as
this
.
带参数的函数
您还可以将任意数量的参数传递给辅助函数,如下所示:
模板:{{frob a b c verily=true}}
辅助调用:frob(a, b, c, Spacebars.kw({verily: true}))
当应用于 if block 时,我们可以执行以下操作:
{{#if equals owner currentUser._id}}
<button class="delete">×</button>
{{/if}}
然后将 equals
添加到我们的模板助手中,如下所示:
Template.item.helpers({
equals: function(v1, v2) {
return (v1 === v2);
}
});
通用助手
由于这是一个可以在任何地方使用的通用方法,因此我们应该将其添加到每个模板中,而不是重新创建它。
Note: To create a helper that can be used in any template, use
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
关于if-statement - 检查空格键是否相等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24650658/