Meteor Blaze HTML:每个循环内的条件模板

时间:2014-09-11 22:56:42

标签: meteor handlebars.js meteor-blaze spacebars

我有3个人,每个人对同一个问题都有独特的答案。

1个模板显示名称和问题。另一个不同的模板是答案。 (4个模板.1个用于名称/问题,3个其他 - 每个唯一答案1个)。

<template name="people">

  {{#each profile }}

    <h2>{{ name }}</h2>
    <p>{{ question }}</p>    

    <p>{{> answer }}</p> 

  {{/each }}

</template>

我想设置一个帮助器,这样当每个profile循环运行时,我可以插入正确的命名模板(而不是{{> answer }},3个不同的模板由它们的名称{{1 },又名{{> nameAnswers }}

尝试了这一点,在每个{{> fooAnswers }}中显示全部3个,而不是每profile个1个。

profile

注意:<template name="people"> {{#each profile }} <h2>{{ name }}</h2> <p>{{ question }}</p> {{#if nameHelper=Fred }} {{> fredAnswers }} {{/if }} {{#if nameHelper=Ringo }} {{> ringoAnswers }} {{/if }} {{#if nameHelper=Jackson }} {{> jacksonAnswers }} {{/if }} {{/each }} </template> 模板已经定义为静态html,需要将它们全部插入。

3 个答案:

答案 0 :(得分:5)

您无法像=运算符那样测试相等性。您需要定义一个帮助程序,例如:

UI.registerHelper('equals', function(a, b) {
  return a == b; // == intentional
};

然后你可以使用它:

{{#if equals nameHelper 'Ringo'}}  
  {{> ringoAnswers}}
{{/if}}

答案 1 :(得分:5)

你可以这样做......

使用Blaze

https://github.com/meteor/meteor/wiki/Using-Blaze

<template name="people">

  {{#each profile }}

    <h2>{{ name }}</h2>
    <p>{{ question }}</p>              

            {{#if isName Fred }}  
              {{> fredAnswers }}
            {{/if }}

            {{#if isName Ringo }}  
              {{> ringoAnswers }}
            {{/if }}  

            {{#if isName Jackson }}  
              {{> jacksonAnswers  }}
            {{/if }} 
  {{/each }}

</template>


Template.people.helpers({
    isName:function(name){
       return //true or false;
    }
})

答案 2 :(得分:3)

{{#if nameHelper=Fred }}测试Spacebars.kw({nameHelper: view.lookup("Fred")})是否为真,因为它是一个对象。这就是为什么这三个人都出现的原因。

看起来你有一个帮助器nameHelper,它返回一个字符串。您可以使用返回模板的帮助程序。假设它是这样的:

Template.people.nameHelper = function () {
    // return 'Fred', 'Ringo', or 'Jackson'
};

Template.people.chooseAnswerTemplate = function () {
    return {
        'Fred': Template.fredAnswers,
        'Ringo': Template.ringoAnswers,
        'Jackson': Template.jacksonAnswers
    }[Template.people.nameHelper.call(this)];
};

并在您的people模板中

<template name="people">
    {{#each profile }}
        ...
        {{> chooseAnswerTemplate}}
    {{/each }}
</template>