2012-04-03 14 views
0

私はハンドルバーが新しく、回避策を見つけている間、登録されているヘルパーがなぜ機能するのか不思議です。動作しない例は、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; 
}); 

どれが高く評価され役立ちます。

答えて

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> 
を探す前に変更する必要があります