我目前在我的网站上使用Handlebar.js,我的一个观点中有以下代码:
{{# each navLinks}}
{{#ifeq ../section key}}
{{key}}
{{else}}
{{/ifeq}}
{{/each}}
然后在我的中间件中我有:
locals.navLinks = [
{ label: 'Projects', key: 'projects', href: '/projects' },
{ label: 'Journey', key: 'journey', href: '/journey' },
{ label: 'Social media', key: 'social', href: '/social' },
{ label: 'Reach me', key: 'contact', href: '/contact' }
];
然后有一个辅助函数:
// standard hbs equality check, pass in two values from template
// {{#ifeq keyToCheck data.myKey}} [requires an else blockin template regardless]
_helpers.ifeq = function(a, b, options) {
if (a == b) {
return options.fn(this);
} else {
return options.inverse(this);
}
};
我理解{{# each navLinks}}
表示它会通过locals.navlinks
数组。
但{{#ifeq ../section key}}
如何运作?我没有看到任何引用数组中的任何对象键或名为../section的键,也没有看到eq
之后对{{#if
的任何引用?
#
和{{# each navLinks}}
中{{#ifeq ../section key}}
的用途是什么?
最后,我的最终目标是使用把手在我的视图中写一些内容,如:
if ( navlinks.key === 'projects' ) {
class="A"
} else {
class="B"
}
任何解释都会很棒。
感谢您的帮助。
朱
答案 0 :(得分:1)
所以我明白了。有一个../content的原因是因为每个视图都有自己的模块。在这种情况下,有“locals.section =' nameOfView';
因为它位于{{# each...
块中,从内部检索content
数据的唯一方法是使用../
转到其父级。
因此,为了让我在页面上进行简单的检查,这是我使用的脚本:
{{#ifeq section "journey"}}it'sTrue{{else}}it'sFalse{{/ifeq}}
就是这样。我还没有想到的唯一的事情是#
部分。