0

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

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

我在模型中设置了可能的选项,如下所示:

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

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

现在我正在尝试显示集合集合的行,用默认记录的 foo 值(aaa 或 bbb 或 ccc)填充选择。我的理解是您必须在标签中添加“选定”。所以我用多个嵌套块做这样的事情:

<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 部分,一切似乎都正常工作,正确/错误已充分返回。

提前感谢您的帮助。

4

1 回答 1

0

Handlebars 条件不适合内联。事实上,我不确定它们是否可以在任何地方内联工作。发生的事情是 Handlebars 模板引擎不理解您的 html,因此它跳过了它,这就是您看到“>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);
  };
于 2013-04-04T15:12:36.830 回答