所以我有一个非常简单的把手助手 -
Handlebars.registerHelper('selectRow', (rowIndex, selectedIds) ->
console.log 'row index'
console.log rowIndex
console.log selectedIds
isSelected = _.indexOf(rowIndex, selectedIds)
if isSelected > -1
return 'class="row-selected"'
)
我有这个把手代码 -
<div class="title">{{ title }}</div>
<hr/>
<table cellspacing="0" cellpadding="0">
<thead>
{{#each columns}}
<th class="col-heading" data-heading="{{ this }}">{{ this }}</th>
{{/each}}
</thead>
<tbody>
{{#each rows}}
<tr {{#selectRow @index selected }}>
{{#each this}}
<td>
{{this}}
</td>
{{/each}}
</tr>
{{/selectRow}}
{{/each}}
</tbody>
</table>
所选参数始终未定义。如果我在其他任何地方添加{{selected}},它会显示一个数组,正如您从下面可以看到的那样,它应该 -
data = @model.data()
selected = @model.get('selection').get('selected')
@$el.html(@tableContentsTemplate({
columns: @model.get('columns')
rows: data
title : @model.get('title')
selected: JSON.stringify(selected)
}))
如何将所选参数正确传递给我的助手?
答案 0 :(得分:1)
您在Handlebars selected
循环中使用each
变量,因此我认为selected
不在范围内。
答案 1 :(得分:1)
我认为你对_.indexOf
的工作方式感到有些困惑。来自fine manual:
indexOf
_.indexOf(array, value, [isSorted])
返回数组中可以找到值的索引,如果中没有值,则返回 -1 阵列强>
因此,您正在搜索的数组selectedIds
应该是第一个参数,而您要搜索的元素是第二个。也许你的意思是说:
isSelected = _.indexOf(selectedIds, rowIndex)
或更好(IMO):
isSelected = _(selectedIds).indexOf(rowIndex)
我通常发现使用_()
函数会产生更清晰的代码。
此外,{{#selectRow @index selected }}
{{selectRow @index selected}}
不应该#
?领先的{{1}}应该引入一个块,但是你的助手不会被写为块助手。
一旦上述两个问题得到解决,似乎就会发生明智的事情:http://jsfiddle.net/ambiguous/pkVZc/1/