handlebars.js - Select 基于辅助输出的循环
handlebars.js - Select loop based on helper output
在我的页面中,我的 context.js
中有 2 set of loop
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
能够select其中设置来显示。比如:domain.com/?set=1
& domain.com/?set=2
并以此为基础,对 set 将设置在loop
并显示。
我尝试为它创建一个助手,如下所示,但它没有给出错误或显示内容:
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}}
感谢任何帮助,并提前致谢!
不支持链接助手的此类功能:https://github.com/wycats/handlebars.js/issues/304。如果你想要这样的东西,你必须编写一个助手,它将第一个助手产生的结果链接到第二个助手(但忘记#each)。
在 post 中,您会找到有关编写此类助手的代码:
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;
});
我设法通过 handlebarjs
具有的内置函数 lookup
实现了这一点,如下所示:
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}}
在我的页面中,我的 context.js
loop
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
能够select其中设置来显示。比如:domain.com/?set=1
& domain.com/?set=2
并以此为基础,对 set 将设置在loop
并显示。
我尝试为它创建一个助手,如下所示,但它没有给出错误或显示内容:
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}}
感谢任何帮助,并提前致谢!
不支持链接助手的此类功能:https://github.com/wycats/handlebars.js/issues/304。如果你想要这样的东西,你必须编写一个助手,它将第一个助手产生的结果链接到第二个助手(但忘记#each)。
在 post 中,您会找到有关编写此类助手的代码:
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;
});
我设法通过 handlebarjs
具有的内置函数 lookup
实现了这一点,如下所示:
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}}