2

我有 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 个由它们的名称标识的不同模板{{> nameAnswers }},又名{{> fooAnswers }}.

试过这个,它在 each 中显示所有 3 个profile,而不是在 per 中显示 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>

注意:{{> nameAnswers }}模板已经定义为静态html,只需要插入即可。

4

3 回答 3

5

你可以这样做...

使用火焰

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;
    }
})
于 2014-09-11T23:57:41.303 回答
5

你不能用=这样的运算符测试相等性。您需要定义一个助手来执行此操作,例如:

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

然后你可以使用它:

{{#if equals nameHelper 'Ringo'}}  
  {{> ringoAnswers}}
{{/if}}
于 2014-09-11T23:42:55.287 回答
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>
于 2014-09-11T23:39:45.573 回答