有没有办法来缩短多个空格条件运算
{{#if arg1}}
{{#if arg2}}
//stuff
{{/if}}
{{/if}}
只是一个单一的,如果?
{{#if arg1 arg2}}
{{#if arg1 && arg2}}
以上两者似乎都不起作用。
有没有办法来缩短多个空格条件运算
{{#if arg1}}
{{#if arg2}}
//stuff
{{/if}}
{{/if}}
只是一个单一的,如果?
{{#if arg1 arg2}}
{{#if arg1 && arg2}}
以上两者似乎都不起作用。
Spacebars延续了Mustache和Handlebars为无逻辑模板语言的理念。这就是为什么简单的逻辑最好放置在控制器中而不是模板中的原因。
但是,您可以执行逻辑and
的define a custom block helper。
<template name="ifand">
{{#if arg1}}
{{#if arg2}}
{{> Template.contentBlock}}
{{else}}
{{> Template.elseBlock}}
{{/if}}
{{else}}
{{> Template.elseBlock}}
{{/if}}
</template>
电话为:
您还可以了解more about passing variables into templates。
对于一般情况下(的参数任意数量之间and
),你要注册一个全局模板帮手:
Template.registerHelper('and', function() {
var args = Array.prototype.slice.call(arguments, 0, -1); // exclude key=value args
var parameters = arguments[arguments.length - 1]; // key: value arguments
return _.every(args, function (arg) {
return !!arg;
});
});
电话为:
{{#if and 1 "foo" 3 'bar' param="test"}}
True
{{else}}
False
{{/if}}
我知道如何将变量传递到模板中,这种方法令我担忧的是它无法处理X参数。我需要许多不同的模板来执行基本相同的任务。能够定义我自己的助手感觉就像是正确的路线,但我不明白如何将变量传递到助手的工作方式,除非它具有只能处理单个变量的相同问题。 – Sinistralis 2014-11-04 21:38:43
您能不能在lib文件夹中成功定义模板?如果不是,放置全局模板帮助器定义的最佳位置在哪里? – Sinistralis 2014-11-05 15:28:06
我会把它们放在'/ client/lib'中。应该在那里定义“模板”。 – 2014-11-05 22:25:32
虽然在模板中,您可以使用这个对象来引用传入的参数,这可以避免在我需要它们的大多数情况下使用多个#if参数。
Template.myTemplate.created = function() {
if(this.data.arg1 && this.data.arg2) {
//do JS setup here
}
}
此外,助手可以使用
Template.registerHelper('exists', function() {
if(this.data.arg1 && this.data.arg2) {
return true
}
}
指定你执行上面的助手这样
{{#if exists}}
//stuff
{{/if}}
{{> myTemplate arg1 arg2}}
我只是在这个偶然的事故,但是这是一个巨大的发现对我来说。
我相信[UI.registerHelper已被弃用](https://github.com/meteor/meteor/issues/3017)。请检查我更新的答案。 – 2014-11-04 23:15:09
我尝试使用Template.registerHelper,并一直告诉我,模板是未定义的。这很奇怪。如果是这种情况,我需要弄清楚为什么它不适合我,并相应地更新。 – Sinistralis 2014-11-05 15:02:38
已更新此信息以反映您的信息,因此我不会传播信息。尽管如此,请在我的回答中看到我的评论,因为在lib定义期间UI存在,但Template没有,我觉得像lib是我应该定义全局帮助者的地方。 – Sinistralis 2014-11-05 15:29:16
我发现我可以使用UI.registerHelper(),但是我不确定如何配置它以采取任何数量的争论。 (数组似乎没有工作,还没有尝试映射) – Sinistralis 2014-11-04 21:28:55