【问题标题】:Custom handlebars helper自定义车把助手
【发布时间】:2013-10-10 13:38:22
【问题描述】:

我有返回 JSON 的函数:

  Template.mainmenu.menuitem = function() {
    var jsonObj = { items: [
        { url: "http://google.com", title: "google" },
        { url: "http://stackoverflow.com", title: "stackoverflow" },
      ] };

    return jsonObj;
  };

我有自定义车把助手:

  Handlebars.registerHelper('woodoo', function(context, options) {
    var ret = "";
    for(var i = 0, j = context.length; i < j; i++) {      
      ret = ret + options.fn(context[i]);
      alert(ret);
    }

    return ret;
  });

这是模板:

<template name="mainmenu">
  {{#woodoo menuitem}}
    <a href="{{url}}">{{title}}</a>
  {{/woodoo}}

HTML 页面正在无错误地呈现,但我看不到 url,也没有任何警报消息。为什么以及如何解决?

【问题讨论】:

    标签: javascript meteor handlebars.js


    【解决方案1】:

    看起来,在您的车把辅助函数中,context.length 将返回 undefined,因此没有什么需要提醒的。

    您希望 for 循环在 items 键中的键长度处停止。一个简短的写法是Object.keys(context.items).length。同样,您需要迭代的键位于context.items

    Handlebars.registerHelper('woodoo', function(context, options) {
      var ret = "";
      for(var i = 0, j = Object.keys(context.items).length; i < j; i++) {
        ret = ret + options.fn(context.items[i]);
      alert(ret);
    }
      return ret;
    });
    

    【讨论】:

    【解决方案2】:

    鉴于您列出的 Template.mainmenu.menuitem 函数,您不需要自定义 Handlebars 助手。您可以像这样使用内置的#each 助手:

    <template name="mainmenu">
      {{#each menuitem.items}}
        <a href="{{url}}">{{title}}</a>
      {{/each}}
    </template>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多