2012-10-31 18 views
19

Ich habe begonnen, Lenker.js zu verwenden. Es scheint, dass es keine eingebauten Bedingungen wie sonst gibt. Ich mag etwas haben, wie diesLenker js benutzerdefinierte Helfer für sonst, wenn

{{#if type.one }} 
    do something ... IF 
{{else if type.two}} 
    do something ... ELSE IF 
{{else}} 
    do something ... ELSE 
{{/if}} 

Aber das funktioniert nicht. Wie mache ich ELSE IF mit Lenker? Ist das Schreiben eines benutzerdefinierten Helpers die einzige Option? Wenn ja, dann geben Sie bitte einige Hinweise an, um diesen Helfer zu schreiben.

Antwort

20

Sie können dies nicht mit einem benutzerdefinierten Helfer tun, da Lenker if-ish Helfer nur zwei Teile verstehen: den "if" Teil und den "else" Teil. Sie können Dinge verschachteln:

{{#if type.one}} 
    do something ... IF 
{{else}} 
    {{#if type.two}} 
     do something ... ELSE IF 
    {{else}} 
     {{#if type.three}} 
      ... 
     {{else}} 
      ... 
     {{/if}} 
    {{/if}} 
{{/if}} 

Diese Art von Sache wird böse schnell, so dass Sie wahrscheinlich nicht wollen, dass zu tun. Ein besserer Ansatz wäre (wie üblich bei Handlebars), die Logik in Ihr JavaScript zu übertragen, so dass höchstens eines von type.one, type.two, type.three, ... wahr wäre; dann könnten Sie:

{{#if type.one}} 
    ... 
{{/if}} 
{{#if type.two}} 
    ... 
{{/if}} 
{{#if type.three}} 
    ... 
{{/if}} 

Wenn Sie eine Menge von Optionen für type oder wenn die Körper in Ihrem {{#if}} s sind kompliziert haben, Sie zu partials wechseln könnte. Sie müssten einen benutzerdefinierten Helfer hinzufügen, um einen Teilnamen zu erstellen, der auf einer Vorlagenvariablen basiert. so etwas wie dieses:

Handlebars.registerHelper('show_type', function(type) { 
    var types = ['one', 'two', 'three']; 
    var partial; 
    for(var i = 0; i < types.length; ++i) { 
     if(!type[types[i]]) 
      continue; 
     partial = '_partial_' + types[i]; 
     break; 
    } 
    if(partial) 
     return Handlebars.partials[name](this); 
    else 
     return ''; 
}); 

und dann Ihre partials vorausgesetzt werden alle registriert und konsequent genannt, könnte man sagen:

{{show_type type}} 
1

Sie können dies tun:

{{#if type.one}} 
    ... 
{{else}} {{#if type.two}} 
    ... 
{{else}} {{#if type.three}} 
    ... 
{{else}} 
    ... 
{{/if}}{{/if}}{{/if}} 
0

Die genaue Syntax dass das OP geschrieben hat, wird in Ember Canary heute mit der ember-htmlbars-inline-if-helper Feature-Flag aktiviert funktionieren.

1

Wenn Sie ein Schaltverhalten wollen, könnten Sie in Dan Harper's helpers interessiert sein, werden Sie in der Lage sein, etwas zu tun:

{{#is type 1}} 
    <p>Do something when 1.</p> 
{{else}}{{#is type 2}} 
    <p>Do something when 2.</p> 
{{else}}{{#is type 3}} 
    <p>Do something when 3.</p> 
{{/is}}{{/is}}{{/is}} 

Hier ist die jsfiddle.

Verwandte Themen