Meteor/Blaze - 参数中的简单字符串连接

Posted

技术标签:

【中文标题】Meteor/Blaze - 参数中的简单字符串连接【英文标题】:Meteor/Blaze - Simple string concatenate in parameter 【发布时间】:2015-07-01 09:54:45 【问题描述】:

我知道如何通过更扩展且可能“正确”的方法来做到这一点,但我想知道是否有更简单的方法来做到这一点。

> alert message="My message"

基本上,我有一个模板,其值为message。我想给它发送消息Logged in as: samanime,其中samanimecurrentUser.username 的任何值。

我知道我可以通过创建一个帮手来为我连接这两个部分来做到这一点,但是有没有什么方法可以在没有额外帮手的情况下做到这一点?可能是这样的:

> alert message="Logged in as: $currentUser.username"

【问题讨论】:

你试过> alert message="Logged in as: "+currentUser.username吗? 我相信我做到了,而且我的 IDE(最新 Webstorm)说这是一个错误......虽然我实际上不知道我是否检查过 Meteor 本身是否说这是一个错误。 我刚刚测试了这个,确实报错了。 【参考方案1】:

在尝试了几个想法之后,我想我想出了一个合理的解决方案,不会(太多)违反视图和逻辑的分离。

首先,为了进行实际的连接,我做了一个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

我认为这是一种相当干净和灵活的方式,不仅可以连接,还可以获取其他简单的多参数值。此时唯一的缺点是它只允许您创建一个变量(因为每个范围都将它放在同一个位置)。然而,这可以通过让其他助手返回对象来克服。

当然,这是你不想滥用的东西,因为它会模糊我们试图在视图和逻辑之间保持的清晰界限。

【讨论】:

以上是关于Meteor/Blaze - 参数中的简单字符串连接的主要内容,如果未能解决你的问题,请参考以下文章

Meteor + Blaze - If else 语句

Meteor Blaze 访问 Template.onCreated 内的 Template.contentBlock

如何将javascript函数中的参数字符串连接到附加html中的字符串上?

误解 `each...in` 渲染与反应变量

将字符串连接到 pig 中的字段

如何将字符串连接到刀片中的 $ 变量?