0

私はHandlebarsを初めて使用し、回避策を見つけましたが、登録されたヘルパーの1つが機能し、もう1つが機能しないのはなぜか疑問に思っています。動作しない例は、HBドキュメントの例です。

HTML:

<ul class="global-nav clearfix">
  {{#each data}}
 <li><a href="{{href}}">{{text}}</a></li>
 {{/each}}
</ul>
...
<ul class="content-nav clearfix">
  {{#each data}}
  <li><a href="{{href}}">{{text}}</a></li>
  {{/each}}
</ul>

データ:

var nav = [
  {
    name: 'global',
    selector: $('.global-nav'),
    data: [
      {
        text: 'Page 1',
        href: 'page1.html'
      }, {
        text: 'Page 2',
        href: 'page2.html'
      }
    ],

    name: 'content',
    selector: $('.content-nav'),
    data: [
      {
        text: 'Section 1',
        href: '#section1'
      }, {
        text: 'Section 2',
        href: '#section2'
      }
    ]
  }
];

コンパイラ:

$.each(nav, function() {
  var obj = this,
      src = obj.selector.html(),
      template = Handlebars.compile(src),
      html = template(obj.data);

  obj.selector.html(html);
});

HBヘルパー(機能しません-コンテキストは未定義です):

Handlebars.registerHelper('each', function(context, options) {
  var ret = "";

  for(var i=0, j=context.length; i<j; i++) {
    ret = ret + options.fn(context[i]);
  }

  return ret;
});

HBヘルパー(thisコンテキストの代わりに使用して動作します):

Handlebars.registerHelper('each', function(context, options) {
  var ret = "";

  for(var i=0, j=this.length; i<j; i++) {
    ret = ret + options.fn(this[i]);
  }

  return ret;
});

どんな助けでも大歓迎です。

4

1 に答える 1

0

JSの残りの部分を見る前に、JSONが間違っているように見えることを指摘できますか。

名前、セレクター、およびデータは、JSONで2回目に発生したときに上書きされます。SOに貼り付けるときに一部のビットが省略されているだけの場合は、無視してください; o)

しかし、それ実際のJSONである場合は、機能的なものを確認する前に変更する必要があります

<script>
var nav = [
{
  name: 'global',
  selector: $('.global-nav'),
  data: [
    {
      text: 'Page 1',
      href: 'page1.html'
    }, {
      text: 'Page 2',
      href: 'page2.html'
    }
  ]
}, // this line 
{  // and this line added
  name: 'content',
  selector: $('.content-nav'),
  data: [
    {
      text: 'Section 1',
      href: '#section1'
    }, {
      text: 'Section 2',
      href: '#section2'
    }
  ]
}
];
</script>
于 2012-04-11T09:33:37.620 に答える