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

handlebars ヘルパー関数では、context.lengthが返されるように見えるundefinedため、警告するものは何もありません。

キー内のitemsキーの長さで for ループを停止する必要があります。それを短く書くと、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 に答える