使用把手模板时出错

时间:2016-06-02 09:35:05

标签: javascript html handlebars.js

我有一个像bellow一样的把手模板,

   <script id="pins-list-template" type="text/x-handlebars-template">
      {{#if ListCount > 0}}
        <ul>
          {{#each ListData}}
            <li>
              <img src="assets/3dimage.png" data-src="{{thumbURL}}"/>
            </li>
          {{/each}}
       </ul>
     {{else}}
        Empty Result
     {{/if}}
  </script>

如果我尝试渲染这个,我收到此错误,

  

错误:第3行的解析错误:{{#if ListCount&gt; 0}} {   ---------------- ^期待'CLOSE','CLOSE_UNESCAPED','STRING','INTEGER','BOOLEAN','OPEN_SEXPR','CLOSE_SEXPR','ID', '等于',   'DATA','SEP','无效'

3 个答案:

答案 0 :(得分:1)

尝试使用main array.length而不是&gt; 0

{{#if ListData.length}}
   <ul>
     {{#each ListData}}
         <li>
           <img src="assets/3dimage.png" data-src="{{thumbURL}}"/>
        </li>
     {{/each}}
  </ul>
{{else}}
    Empty Result
{{/if}}

为了使用&gt; 0你需要写一个帮手(例如更大)

铌! Javascript使用camelCase命名约定,只有类是大写的。

答案 1 :(得分:0)

尝试在JavaScript中评估函数,然后在上下文中传递结果:

context.ListHasData = (context.ListCount > 0);

YourHandleBarsTemplate(context);

答案 2 :(得分:0)

我搜索并找到了解决方案。 看一看:http://jsfiddle.net/a9wjbsch/520/ 你需要使用把手帮手:)

Handlebars.registerHelper('compare', function (lvalue, rvalue, options) {

if (arguments.length < 3)
    throw new Error("Handlerbars Helper 'compare' needs 2 parameters");

var operator = options.hash.operator || "==";

var operators = {
    '==': function (l, r) { return l == r; },
    '===': function (l, r) { return l === r; },
    '!=': function (l, r) { return l != r; },
    '<': function (l, r) { return l < r; },
    '>': function (l, r) { return l > r; },
    '<=': function (l, r) { return l <= r; },
    '>=': function (l, r) { return l >= r; },
    'typeof': function (l, r) { return typeof l == r; }
}

if (!operators[operator])
    throw new Error("Handlerbars Helper 'compare' doesn't know the operator " + operator);

var result = operators[operator](lvalue, rvalue);

if (result) {
    return options.fn(this);
} else {
    return options.inverse(this);
}