3

だから私は非常にシンプルなハンドルバーヘルパーを持っています -

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

選択したパラメーターをヘルパーに正しく渡すにはどうすればよいですか?

4

2 に答える 2

1

どのように機能するかについて少し混乱していると思います_.indexOf細かいマニュアルから:

の指標 _.indexOf(array, value, [isSorted])

配列内でが見つかるインデックスを返します。値が配列内に存在しない場合は-1を返します。

したがって、検索している配列selectedIdsは最初の引数で、検索している要素は 2 番目の引数である必要があります。おそらくあなたは次のように言いたいのでしょう:

isSelected = _.indexOf(selectedIds, rowIndex)

またはそれ以上 (IMO):

isSelected = _(selectedIds).indexOf(rowIndex)

通常、この_()関数を使用すると、コードがより明確になります。

また、すべきではありませ{{#selectRow @index selected }}{{selectRow @index selected}}か?リーディング#はブロックを導入する必要がありますが、ヘルパーはブロック ヘルパーとして記述されていません。

上記の問題の両方が修正されると、賢明なことが起こっているようです: http://jsfiddle.net/ambiguous/pkVZc/1/

于 2013-08-12T22:45:13.720 に答える
1

selectedHandlebarseachループ内で変数を使用しているためselected、スコープ内にないと思います。

于 2013-08-12T22:36:06.580 に答える