在Meteor中嵌套车把块的奇怪结果

时间:2013-04-04 11:17:31

标签: nested meteor handlebars.js

我正在尝试在html选择中设置默认值,但没有成功。 我正在做这样的初始填充:

<template name="demo">
    <select>
        {{#each foo}}
            <option>{{this}}</option>
        {{/each}}
    </select>
</template>

我在模型中设置了可能的选项:

Template.demo.foo = ["aaa","bbb","ccc"];

到目前为止,一切都按预期工作。

现在我正在尝试显示集合collec的行,用defaut记录的foo值(aaa或bbb或ccc)填充select。 我的理解是你必须在标签上添加“selected”。 所以我用多个嵌套块做这样的事情:

<template name="demo">
    {{#each collecs}}
        {{_id}}
        <select>
            {{#each foos}}
                <option{{#if isSelected this ../this}}selected{{/if}}>{{this}}</option>
            {{/each}}
        </select>
    {{/each}}
</template>

在模特面前:

Template.demo.foos = ["aaa","bbb","ccc"];

    Template.demo.collecs = function(){
      return Collec.find({});
      };

    Template.demo.isSelected = function(fooToCheck, record){
      var rid= record._id; 
      var currentRecord = Collec.findOne({_id:rid});
      return (fooToCheck==currentRecord.foo);
  };

问题在于它不起作用。 下拉列表保持为空,生成的html代码显示如下:

"              >aaa             "

我已经检查了js部分,所有似乎都正常工作,真/假被充分归还。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

把手条件不能很好地内联。事实上,我不确定它们是否可以在任何地方内联工作。发生的事情是Handlebars模板引擎不理解你的html,所以它跳过它,这就是你看到'&gt; aaa'的原因。

以下代码有效。我冒昧地简化了你的isSelected功能。

<强>模板:

<template name="demo">
    {{#each collecs}}
        {{_id}}
        <select>
            {{#each foos}}
                {{#if isSelected this ../foo}}
                  <option selected>{{this}}</option>
                {{else}}
                  <option>{{this}}</option>
                {{/if}}
            {{/each}}
        </select>
    {{/each}}
</template>

<强> JavaScript的:

  Template.demo.foos = ["aaa","bbb","ccc"];

  Template.demo.collecs = function(){
    return Collec.find({});
  };

  Template.demo.isSelected = function(fooToCheck, recordFoo){
    return (fooToCheck === recordFoo);
  };