Meteor/Blaze - 参数中的简单字符串连接
Meteor/Blaze - Simple string concatenate in parameter
我知道如何通过更扩展的、可能 "proper" 方法来做到这一点,但我想知道是否有任何更简单的方法来做到这一点。
{{> alert message="My message"}}
基本上,我有一个采用值 message
的模板。我想给它消息 Logged in as: samanime
,其中 samanime
是 currentUser.username
.
的任何值
我知道我可以通过创建一个助手来为我连接两个部分来做到这一点,但是有没有什么方法可以在没有额外助手的情况下做到这一点?也许是这样的:
{{> alert message="Logged in as: ${currentUser.username}"}}
在尝试了几个想法之后,我想我已经想出了一个合理的解决方案,它不会(过多地)违反视图和逻辑的分离。
首先,为了进行实际的串联,我制作了一个 concat
助手:
// Takes any number of arguments and returns them concatenated.
UI.registerHelper('concat', function () {
return Array.prototype.slice.call(arguments, 0, -1).join('');
});
用法示例:
{{ concat "a" "b" "c" }}
{{! output: "abc" }}
然后,我做了一个新的块助手,withResult
:
帮手:
UI.registerHelper('withResult', function () {
Template._withResult.helpers({result: this.valueOf()});
return Template._withResult;
});
模板:
<template name="_withResult">
{{> UI.contentBlock result=result}}
</template>
用法示例:
{{#withResult concat "a" "b" "c"}}
{{> alert message=result}}
{{/withResult}}
基本上,它获取块调用的结果(在本例中为 concat)并将其放入模板可用的变量 result
中。
我认为这是一种相当干净和灵活的方式,不仅可以连接,还可以跨过其他简单的多参数值。此时唯一的缺点是它只允许您创建一个变量(因为每个作用域都将它放在同一个位置)。但是,这可以通过使用其他助手 return 对象来克服。
当然,这是您不想滥用的东西,因为它会模糊我们试图在视图和逻辑之间保持的清晰界限。
我知道如何通过更扩展的、可能 "proper" 方法来做到这一点,但我想知道是否有任何更简单的方法来做到这一点。
{{> alert message="My message"}}
基本上,我有一个采用值 message
的模板。我想给它消息 Logged in as: samanime
,其中 samanime
是 currentUser.username
.
我知道我可以通过创建一个助手来为我连接两个部分来做到这一点,但是有没有什么方法可以在没有额外助手的情况下做到这一点?也许是这样的:
{{> alert message="Logged in as: ${currentUser.username}"}}
在尝试了几个想法之后,我想我已经想出了一个合理的解决方案,它不会(过多地)违反视图和逻辑的分离。
首先,为了进行实际的串联,我制作了一个 concat
助手:
// Takes any number of arguments and returns them concatenated.
UI.registerHelper('concat', function () {
return Array.prototype.slice.call(arguments, 0, -1).join('');
});
用法示例:
{{ concat "a" "b" "c" }}
{{! output: "abc" }}
然后,我做了一个新的块助手,withResult
:
帮手:
UI.registerHelper('withResult', function () {
Template._withResult.helpers({result: this.valueOf()});
return Template._withResult;
});
模板:
<template name="_withResult">
{{> UI.contentBlock result=result}}
</template>
用法示例:
{{#withResult concat "a" "b" "c"}}
{{> alert message=result}}
{{/withResult}}
基本上,它获取块调用的结果(在本例中为 concat)并将其放入模板可用的变量 result
中。
我认为这是一种相当干净和灵活的方式,不仅可以连接,还可以跨过其他简单的多参数值。此时唯一的缺点是它只允许您创建一个变量(因为每个作用域都将它放在同一个位置)。但是,这可以通过使用其他助手 return 对象来克服。
当然,这是您不想滥用的东西,因为它会模糊我们试图在视图和逻辑之间保持的清晰界限。