根据网址哈希更改表达式-handlebars.js

本杰明

我刚刚开始使用把手,并且您不能在模板中使用Js,因此您必须使用helpers(?),否则我就相信了自己。

我想基于URL哈希更改表达式。

所以,如果我的网址是www.mysite.com/template.html#new我想#each{{#each New}},如果这是/template.html#anythingelse我希望它改变{{#each anythingelse}}

我知道我可以使用哈希,var hash = window.location.hash;并且通常可以使用哈希,+hash+但是使用把手我不太了解吗?

而且我知道可能不太好,因为用户可以输入#whattheywant,但与我的使用方式无关紧要。

    <ul>
        {{#each New}}
         {{#each genres}}

            <li>{{genre-name}}
                <ul style="list-style-type:none"> 
                    {{#each list}}
                        <li>{{name}}</li>
                    {{/each}}
                </ul> 
            </li>
        {{/each}}
        {{/each}}
    </ul>
  {{/each}}

任何帮助或见识将是惊人的。

AlxH

和往常一样,有几种方法可以做到这一点。

我认为在这里必须有自己的书面帮助者。让我们将其命名为customEach。进一步,让我们templateName成为模板的名称。对于此解决方案,我们必须确保将所有数组都传递给Handlebars。在作者的示例中,这将是一个名为new的数组和一个名为anyelse的数组。

因此,Handlebars调用将类似于:

var ctx = { 
    new: new, 
    anythingelse: anythingelse 
};

Handlebars.templates["templateName"](ctx);

定制块帮助程序“ customEach”可能类似于以下内容:

Handlebars.registerHelper('customEach', function(options) {
    var hash = window.location.hash.substr(1);

    return options.fn(this[hash]);
});

请注意,在一个助手(仅是一些JS代码)中,确实可以访问URL的哈希组件。

Handlebars插件传递给我们的助手的options参数包含一个名为fn的函数。它的行为就像一个普通的编译模板。因此,只需将所需的数组传递给它(this保存当前上下文,该上下文与ctx我们之前传递给Handlebars的变量相对应)。换句话说,fn仅处理{{#customEach}}之间定义的内容{{/customEach}}

新模板将是:

<ul>
    {{#customEach}}
        {{#each genres}}
            <li>{{genre-name}}
                <ul style="list-style-type:none"> 
                    {{#each list}}
                        <li>{{name}}</li>
                    {{/each}}
                </ul> 
            </li>
        {{/each}}
    {{/customEach}}
</ul>

当然,这里应该执行一些错误处理,例如,如果在我们的原始上下文中未定义特定的哈希值#anythewant。

我还没有测试我的代码。但是,即使它失败了,我希望它背后的想法是明确的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Handlebars.js在表达式中传递html

来自分类Dev

Express.js + Handlebars-尝试在视图中使用正则表达式

来自分类Dev

如何在Handlebars.js中的表达式中存储模板?

来自分类Dev

如何在Handlebars.js中的表达式中存储模板?

来自分类Dev

handlebars.js - 根据辅助输出选择循环

来自分类Dev

Handlebars.js grid with data

来自分类Dev

JavaScript VS Handlebars.js

来自分类Dev

Handlebars.js-组合模板

来自分类Dev

jQuery更改事件不适用于输入:Handlebars.js模板中的单选按钮

来自分类Dev

网址中的正则表达式可找到“ /...#/ js”

来自分类Dev

Handlebars.js-全局上下文

来自分类Dev

使用Express Handlebars和Angular JS

来自分类Dev

使用Handlebars.js渲染本地模板

来自分类Dev

解析来自Node js + handlebars的POST请求

来自分类Dev

使用handlebars.js显示JSON数据

来自分类Dev

带数据的Handlebars.js网格

来自分类Dev

将javascript文件注入Handlebars.js

来自分类Dev

使用HandleBars.js创建HTML表

来自分类Dev

ember无法识别handlebars.js

来自分类Dev

通过handlebars.js延迟HTML生成

来自分类Dev

关于助手的Handlebars.js问题

来自分类Dev

Handlebars.js按值分组

来自分类Dev

在Handlebars.js中引用数组项

来自分类Dev

使用Handlebars.js渲染本地模板

来自分类Dev

解析来自Node js + handlebars的POST请求

来自分类Dev

在handlebars.js中的循环内循环

来自分类Dev

使用handlebars.js显示JSON数据

来自分类Dev

Handlebars.js 是否允许动态模板?

来自分类Dev

如何在Handlebars帮助器表达式中将字符串作为参数传递?