0

我在列表表模板中添加了一个组合框,并且我想根据模型中的数据库呈现组合框,那么有什么问题吗?请帮忙..

<script type="text/x-handlebars-template" id="listItemTmpl">
<tr>                             
    <td>{{partNo}}</td>
    <td>
         <select name="selectCombo" id="selectCombo">
                {{#each chks}}
                <option value='{{myModel.id}}' {{#if(this.id==myModel1.status)}}selected{{/if}}>{{myModel1.name}}</option>
                {{/each}}
            </select>
    </td>
</tr>

</script>

我有两个模型;一个是,

 myModel1=Backbone.Model.extend({
    url:url,
    defaults:{
      name:"",
      status:""
  }
 });

另一个是;

myModel=Backbone.Model.extend({
  url:url,
  defaults:{

  }
});
4

3 回答 3

4

问题是,车把不是这样工作的。该表达式{{#if(this.id==myModel1.status)}}不是有效的车把 if 块。

Handlebars 是一个语义的、声明性的模板引擎。它不支持任意 javascript 表达式。您可以使用该块检查的唯一一件事是,某#if事是否真实(不是falseundefinednull或)。""[]

首选方法是在渲染模板之前评估条件,并使用视图模型将结果传递给模板。在您的情况下,您可以为数组isSelected中的每个对象添加一个属性chks,然后在模板中简单地评估它

{{#if isSelected}}selected{{/if}}

有关如何使用把手的示例,请参阅handlebars.js 文档。

于 2012-12-10T14:05:07.787 回答
1

只是一个更新。最新版本的 Handlebars 使用 block.fn() 而不是 block()。否则可能会抛出错误。

Handlebars.registerHelper('ifeq', function(a, b, block) {
    return a == b ? block.fn() : block.inverse();
});
于 2013-06-27T17:25:08.003 回答
1

通常,您应该使用isSelected标志,而fencliff 的答案涵盖了这一点。但是,有时添加额外的标志不是一个合理的选择,如果是这种情况,您可以添加您的{{#ifeq}}助手。像这样简单的东西:

Handlebars.registerHelper('ifeq', function(a, b, block) {
    return a == b ? block() : block.inverse();
});

然后在模板中:

<option value='{{myModel.id}}' {{#ifeq id myModel1.status}}selected{{/ifeq}}>{{myModel1.name}}</option>

演示:http: //jsfiddle.net/ambiguous/rsyv9/

于 2012-12-10T17:05:32.997 回答