sam*_*ime 3 meteor spacebars meteor-blaze
我知道如何通过更加扩展,可能是"正确"的方法来做到这一点,但我想知道是否有更简单的方法来做到这一点.
{{> alert message="My message"}}
Run Code Online (Sandbox Code Playgroud)
基本上,我有一个取值的模板message.我想给它一个信息Logged in as: samanime,samanime无论价值在哪里currentUser.username.
我知道我可以通过创建一个帮助程序来为我连接这两个部分来做到这一点,但是有一些方法可以在没有额外帮助的情况下完成它吗?也许是这样的:
{{> alert message="Logged in as: ${currentUser.username}"}}
Run Code Online (Sandbox Code Playgroud)
在玩了几个想法之后,我想我已经想出了一个合理的解决方案,它不会违反(过多)单独的视图和逻辑.
首先,要做实际的连接,我做了一个concat帮手:
// Takes any number of arguments and returns them concatenated.
UI.registerHelper('concat', function () {
return Array.prototype.slice.call(arguments, 0, -1).join('');
});
Run Code Online (Sandbox Code Playgroud)
用法示例:
{{ concat "a" "b" "c" }}
{{! output: "abc" }}
Run Code Online (Sandbox Code Playgroud)
然后,我做了一个新的块帮手,withResult:
帮手:
UI.registerHelper('withResult', function () {
Template._withResult.helpers({result: this.valueOf()});
return Template._withResult;
});
Run Code Online (Sandbox Code Playgroud)
模板:
<template name="_withResult">
{{> UI.contentBlock result=result}}
</template>
Run Code Online (Sandbox Code Playgroud)
用法示例:
{{#withResult concat "a" "b" "c"}}
{{> alert message=result}}
{{/withResult}}
Run Code Online (Sandbox Code Playgroud)
基本上,它接受块调用的任何结果(在这种情况下,concat)并将其放入result模板可用的变量中.
我认为这是一种相当干净和灵活的方式,不仅可以连接,还可以获得其他简单的多参数值.此时唯一的缺点是它只允许您创建一个变量(因为每个范围将它放在同一个位置).但是,可以通过让其他助手返回对象来克服这个问题.
当然,这是你不想滥用的东西,因为它会模糊我们试图在视图和逻辑之间保持的简洁线条.