【问题标题】:Subexpressions in HandlebarsHandlebars 中的子表达式
【发布时间】:2014-09-24 04:58:25
【问题描述】:

为什么表达式 1、2 和 4 可以按预期工作,而 3 和 5 则不行

HTML:

<script id="template" type="text/x-handlebars-template">
<ol>
    <li>{{dash 'abc' (concat a b)}}</li>
    <li>{{dash d (concat a b)}}</li>
    <li>{{dash c.c (concat a b)}}</li>
    <li>{{dash (concat a b) c.c}}</li>
    <li>{{dash (concat a e.e) c.c}}</li>
</ol>
</script>
<div id="rendered"></div>

JavaScript:

Handlebars.registerHelper('dash', function(a, b) {
    return a + "-" + b;
});

Handlebars.registerHelper('concat', function(a, b) {
    return a + b;
});

var template = Handlebars.compile($("#template").html());
$("#rendered").html(template({a: 'a', b:'b', c:{c:'c'}, d:'d', e: {e: 'e'}}));

jsfiddle:http://jsfiddle.net/beradrian/6T8ah/

实际结果是

1. abc-ab
2. d-ab
3. c-[object Object]
4. ab-c
5. ae-[object Object]

我在 Handlebars 填写了一份错误报告:https://github.com/wycats/handlebars.js/issues/800

【问题讨论】:

    标签: javascript templates handlebars.js


    【解决方案1】:

    在帮助程序的第一个参数中不要使用路径(点)表示法

    如果第一个参数是路径(点)表示法,则第二个参数将被忽略并替换为对第一个参数的根路径的引用。

    这绝对是一个错误,根据您的错误报告中的 cmets,它看起来像是在 v2.0.0-beta.1 中发布了一个修复程序。

    如果您不使用该版本,解决方法是将帮助程序放在 {{#with}} 块中,并从第一个参数中删除路径符号。

    注意:虽然您不能在第一个参数中使用prop.subprop 表示法,但您可以使用../prop 没有问题。

    例如:

    <script id="template" type="text/x-handlebars-template">
        <ol>
            <li>{{dash 'abc' (concat a b)}}</li>
            <li>{{dash d (concat a b)}}</li>
            <li>{{#with c}}
                {{dash c (concat ../a ../b)}}
                {{/with}}</li>
            <li>{{dash (concat a b) c.c}}</li>
            <li>{{#with e}}
                {{dash (concat ../a e) ../c.c}}
                {{/with}}</li>
        </ol>
    </script>
    <div id="rendered"></div>
    

    JSFiddle:http://jsfiddle.net/gfullam/oezb1539/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-06
      • 1970-01-01
      • 1970-01-01
      • 2015-09-07
      • 2013-09-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多