2012-04-03 3 views
0

Ich bin neu in Lenker und während ich einen Workaround gefunden habe, frage ich mich, warum ein registrierter Helfer funktioniert und einer nicht. Das Beispiel, das nicht funktioniert, ist ein Beispiel aus der HB-Dokumentation.Lenker JEDER Iterator-Fehler

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> 

Daten:

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' 
     } 
    ] 
    } 
]; 

Compiler:

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

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

HB Helper (funktioniert nicht - Kontext undefiniert):

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 Helper (funktioniert mit this statt Kontext):

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; 
}); 

Jeder hilft sehr geschätzt wird.

Antwort

0

Bevor ich den Rest des JS ansehe, kann ich darauf hinweisen, dass der JSON falsch aussieht.

Name, Selektor und Daten werden beim zweiten Auftreten in Ihrem JSON überschrieben. Ist dies nur wegen der einige Bits weggelassen werden, wenn SO einfügen, dann mich ignorieren; o)

Aber wenn das ist die reale JSON, dann muss es ändern, bevor

<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> 
jeder funktionelle Sachen suchen