一个简单的问题,但我找不到简单的解决方案。我必须为此写一个帮手吗?
我想在模板中创建特定数量的li项目。具体数字通过名为max。
的参数给出{{> rating max=10 value=rating }}
<template name="rating">
<ul class="rating">
{{#each ?}}
<li class="star">\u2605</li>
{{/each }}
</ul>
</template>
答案 0 :(得分:2)
来自http://docs.meteor.com/#/full/blaze_each:
构造一个视图,为一个项目中的每个项目呈现contentFunc 序列
因此每个必须与序列(数组,游标)一起使用,因此您必须创建一个帮助程序来创建一个使用#each的序列。
通常视图是按项目值自定义的,但在您的情况下,大小为max
的数组将完成此任务。
或者您可以创建一个自定义模板帮助程序,您可以在其中传递html重复次数以及帮助程序中的重复次数和concat html。 像(未经过测试的代码):
// Register helper
htmlRepeater = function (html,n) {
var out = '';
for(var i=0 ; i<n;i++)
out.contat(html);
return Spacebars.SafeString(out);
};
Template.registerHelper('repeat', htmlRepeater);
------------------------
// in template.html
{{{repeat '<li class="star">\u2605</li>' max}}}
答案 1 :(得分:1)
我很好:
Template.registerHelper('repeat', function(max) {
return _.range(max); // undescore.js but every range impl would work
});
和
{#each (repeat 10)}}
<span>{{this}}</span>
{{/each}}
答案 2 :(得分:0)
只需从底层助手返回所需数量的项目:
HTML:
cordova.plugins.email.open({
to: Array, // email addresses for TO field
cc: Array, // email addresses for CC field
bcc: Array, // email addresses for BCC field
attachments: Array, // file paths or base64 data streams
subject: String, // subject of the email
body: String, // email body (for HTML, set isHtml to true)
isHtml: Boolean, // indicats if the body is HTML or plain text
}, callback, scope);
请注意,{{> rating max=10 value=rating }}
<template name="rating">
<ul class="rating">
{{#each myThings max}}
<li class="star">\u2605</li>
{{/each }}
</ul>
</template>
需要通过html模板传递到max
JS:
{{#each}}
当然,如果您正在迭代某个集合,那么您可以将Template.rating.helpers({
myThings: function(max){
// return an array 0...max-1 (as convenient as any other set of values for this example)
return Array.apply(null, Array(max)).map(function (x, i) { return i; });
}
});
限制为.find()
。
我还注意到您的max
模板未在任何地方使用参数rating
。你的意思是:
value
或应该在其他地方取代的价值?