【问题标题】:Strange results with nested handlebar blocks in MeteorMeteor 中嵌套车把块的奇怪结果
【发布时间】:2013-03-26 10:27:03
【问题描述】:

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

提前感谢您的帮助。

【问题讨论】:

    标签: nested meteor handlebars.js


    【解决方案1】:

    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);
      };
    

    【讨论】:

    • 非常感谢,我会试试的。我已经在其他地方制作了内联车把,虽然可能没有像那样与 html 混合,所以我不知道这可能是问题的原因。谢谢!
    • 没问题,如果有效,请确保接受答案。如果您仍有问题,请告诉我!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-03
    • 1970-01-01
    • 2013-11-21
    • 2012-10-23
    • 2023-03-25
    相关资源
    最近更新 更多