Meteor,Blaze:用每个创建一个简单的循环?

时间:2015-12-11 14:22:26

标签: meteor meteor-blaze meteor-helper

一个简单的问题,但我找不到简单的解决方案。我必须为此写一个帮手吗?

我想在模板中创建特定数量的li项目。具体数字通过名为max。

的参数给出
{{> rating max=10 value=rating }}

<template name="rating">
    <ul class="rating">
        {{#each ?}}
            <li  class="star">\u2605</li>
        {{/each }}
    </ul>
</template>

3 个答案:

答案 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

或应该在其他地方取代的价值?