在我的页面中,我的loop
中有context.js
的两个 set 个
set_1: [
{title: 'Set 1'},
{title: 'Set 1'},
{title: 'Set 1'}
],
set_2: [
{title: 'Set 2'},
{title: 'Set 2'},
{title: 'Set 2'}
]
目前我正在做
{{#each set_1}}
{{title}}
{{/each}}
{{#each set_2}}
{{title}}
{{/each}}
我要实现的目标基于url parameters
能够选择要显示的 set 。例如:domain.com/?set=1
和domain.com/?set=2
,并基于此,将在loop
中设置 right 集,并显示该内容。
我试图为它创建一个如下的助手,但是它没有给出错误或显示内容:
function getUrlParam(name) {
var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(window.location.href);
return (results && results[1]) || undefined;
}
var s = getUrlParam('set');
Handlebars.registerHelper('selectSet', function(){
if (s == 1){
return 'set_1'
} else if (s == 2) {
return 'set_2'
} else {
return 'set_1'
}
});
在我的html
页上,我这样做:
{{#each selectSet}}
{{title}}
{{/each}}
感谢您的任何帮助,并在此先感谢您!
答案 0 :(得分:0)
不支持将此类功能链接到助手:https://github.com/wycats/handlebars.js/issues/304。如果您想要这样的事情,则必须编写一个帮助程序,该帮助程序会将第一个帮助程序生成的结果链接到第二个帮助程序(但是请忽略#each)。
在帖子中,您将找到有关编写此类帮助程序的代码:
Handlebars.registerHelper('chain', function () {
var helpers = [], value;
$.each(arguments, function (i, arg) {
if (Handlebars.helpers[arg]) {
helpers.push(Handlebars.helpers[arg]);
} else {
value = arg;
$.each(helpers, function (j, helper) {
value = helper(value, arguments[i + 1]);
});
return false;
}
});
return value;
});
答案 1 :(得分:0)
我设法通过lookup
具有以下内置功能handlebarjs
实现了这一目标:
function getUrlParam(name) {
var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(window.location.href);
return (results && results[1]) || undefined;
}
var s = getUrlParam('set');
Handlebars.registerHelper('selectSet', function(){
if (s == 1){
return 'set_1'
} else if (s == 2) {
return 'set_2'
} else {
return 'set_1'
}
});
// In my HTML
{{#each (lookup . (selectSet))}}
{{name}}
{{/each}}