2

我有返回 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,也没有任何警报消息。为什么以及如何解决?

4

2 回答 2

2

看起来,在您的车把辅助函数中,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;
});
于 2013-10-10T18:12:15.677 回答
1

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

<template name="mainmenu">
  {{#each menuitem.items}}
    <a href="{{url}}">{{title}}</a>
  {{/each}}
</template>
于 2013-10-11T20:31:15.477 回答