我在列表表模板中添加了一个组合框,并且我想根据我模型中的数据库渲染组合框,所以什么是错的?请帮助..
<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:{
}
});
答案 0 :(得分:4)
问题是,车把不起作用。表达式{{#if(this.id==myModel1.status)}}
不是有效的句柄if-block。
Handlebars是一个语义的声明性模板引擎。它不支持任意javascript表达式。您可以使用#if
块检查的唯一事项是,是否真实(不是false
,undefined
,null
,""
或{{1} })。
首选方法是在渲染模板之前评估条件,并使用viewmodel将结果传递给模板。在您的情况下,您可以向[]
数组中的每个对象添加isSelected
属性,并使用
chks
有关如何使用把手的示例,请参阅handlebars.js documentation。
答案 1 :(得分:1)
一般情况下,您应使用isSelected
标记和fencliff's answer标记。但是,有时添加额外标志不是一个合理的选择,如果是这种情况,您可以添加{{#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>
答案 2 :(得分:1)
只是一个更新。最新版本的Handlebars使用了block.fn()而不是block()。否则可能会抛出错误。
Handlebars.registerHelper('ifeq', function(a, b, block) {
return a == b ? block.fn() : block.inverse();
});