多个空格键条件运算符
Posted
技术标签:
【中文标题】多个空格键条件运算符【英文标题】:Multiple Spacebar Conditional Operators 【发布时间】:2014-12-31 22:27:31 【问题描述】:有没有办法缩短
#if arg1
#if arg2
//stuff
/if
/if
只有一个 if?
#if arg1 arg2
#if arg1 && arg2
以上两种方法似乎都不起作用。
【问题讨论】:
我发现我可以使用 UI.registerHelper(),但是我不确定如何配置它来接受任何数量的争论。 (数组好像不行,还没试过maps) 【参考方案1】:空格键延续了 Mustache 和 Handlebars 是无逻辑模板语言的理念。这就是为什么即使是简单的逻辑也最好放在控制器而不是模板中。
但是,您可以使用 define a custom block helper 来执行逻辑 and
。
<template name="ifand">
#if arg1
#if arg2
> Template.contentBlock
else
> Template.elseBlock
/if
else
> Template.elseBlock
/if
</template>
调用为:
#ifand arg1="foo" arg2="bar"
// stuff
/ifand
你也可以学习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 争论。我需要许多不同的模板来执行基本相同的任务。能够定义我自己的助手感觉是正确的路线,但我不明白将变量传递给助手是如何工作的,除非它存在只能处理单个变量的相同问题。 不能在lib文件夹下成功定义Template吗?如果没有,放置全局模板帮助程序定义的最佳位置在哪里? 我会把它们放在/client/lib
。 Template
应该在那里定义。
这是个好主意。我会记下我的标准。感谢您的所有帮助,好先生。【参考方案2】:
在模板中,您可以使用 this 对象来引用传入的参数,这样我就可以避免在大多数需要它们的情况下使用多个#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 is, being deprecated。请检查我的更新答案。 我尝试使用 Template.registerHelper,但它一直告诉我 Template 未定义。这很奇怪。如果是这种情况,我需要弄清楚为什么它对我不起作用并相应地更新它。 已更新此内容以反映您的信息,因此我不会传播信息。不过,请参阅我对您的回答的评论,因为 UI 在 lib 定义期间存在,但 Template 不存在,我觉得 lib 是我应该定义全局帮助程序的地方。 我试过了,但它对我不起作用。我什至没有看到 .this 上下文中的数据属性。我试过这个例如 > myTemplate "country" "label for country" "true" "another string with spaces" true。然后 Template.registerHelper('exists', function ([no parameters?]) if (this.data.arg1) return true );没有this.data,我的arg1是什么?例如,我如何指代“国家”?我在调试中查看了当地人,没有“国家”。顺便说一句,感谢您的提示。我希望它能正常工作,因为我通常必须构建一个只是传递的虚拟助手 我不知道什么 .data 没有暴露给您(我认为这就是为什么该函数调用中没有 args,因为您通过 .data 引用了 args)。你在用 Meteor 1.0X 吗?以上是关于多个空格键条件运算符的主要内容,如果未能解决你的问题,请参考以下文章