有人可以解释#ifeq ../section key如何使用handlebar.js

时间:2016-03-28 02:26:03

标签: javascript operators keystonejs

我目前在我的网站上使用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"
}

任何解释都会很棒。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

所以我明白了。有一个../content的原因是因为每个视图都有自己的模块。在这种情况下,有“locals.section =' nameOfView';

因为它位于{{# each...块中,从内部检索content数据的唯一方法是使用../转到其父级。

因此,为了让我在页面上进行简单的检查,这是我使用的脚本:

{{#ifeq section "journey"}}it'sTrue{{else}}it'sFalse{{/ifeq}}

就是这样。我还没有想到的唯一的事情是#部分。