如果您希望重複使用默認的幫助器each
,並且由於無法向其中注入某些功能,您可以按照您的建議將項目中的原始索引嵌入其中。雖然最簡單的,直接添加到數據中的助手元數據並不是很乾淨。
幫手
handlebars.registerHelper('eachSort', function(array, key, opts) {
// append metadata into data
for (var i = 0; i < array.length; i++) {
array[i].originalIndex = i
}
// sort
var sorted = _.sortBy(array, function(item) {
return item[key]
})
// default each
return handlebars.helpers.each(sorted, opts)
})
模板
{{#eachSort . 'name'}}
name={{name}}=/index_now={{@index}}=/index_org={{originalIndex}}= <br/>
{{/eachSort}}
一個適當的方法是使用@data
變量用於這一目的。您可以跳過缺省的each
助手並手動全部滾動,非常簡單。
幫手
handlebars.registerHelper('eachSort', function(array, key, opts) {
// zip for sorting
var zipped = []
for (var i = 0; i < array.length; i++) {
zipped.push({
originalData: array[i],
originalIndex: i
})
}
// sort
var sorted = _.sortBy(zipped, function(item) {
return item.originalData[key]
})
// custom each
var result = ''
for (var i = 0; i < sorted.length; i++) {
var item = sorted[i]
// set metadata as @data variables
opts.data.index = i
opts.data.originalIndex = item.originalIndex
result += opts.fn(item.originalData, opts)
}
return result
})
模板
{{#eachSort . 'name'}}
name={{name}}=/index_now={{@index}}=/index_org={{@originalIndex}}= <br/>
{{/eachSort}}
或者你可以得到更多的參與進來,同時使用@data
變量和默認each
幫手。
handlebars.registerHelper('eachSort', function(array, key, opts) {
// zip for sorting
var zipped = []
for (var i = 0; i < array.length; i++) {
zipped.push({
originalData: array[i],
originalIndex: i
})
}
// sort
var sorted = _.sortBy(zipped, function(item) {
return item.originalData[key]
})
// separate sorted data
var originalData = []
var originalIndex = []
for (var i = 0; i < sorted.length; i++) {
var item = sorted[i]
originalData.push(item.originalData)
originalIndex.push(item.originalIndex)
}
// set original index metadata generator as @data variable
opts.data.originalIndex = function() {
return originalIndex.shift()
}
// default each
return handlebars.helpers.each(originalData, opts)
})
:因爲它是可以使用的功能
@data
變量,可以將
@originalIndex
數據變量作爲發電機將通過各一個,它被稱爲時間返回原指標的排序順序一個註冊