it-swarm.com.de

Wie erreiche ich ein if / else in moustache.js?

Es scheint ziemlich seltsam, dass ich mir nicht vorstellen kann, wie das mit dem Schnurrbart geht. Wird es unterstützt?

Dies ist mein trauriger Versuch:

    {{#author}}
      {{#avatar}}
        <img src="{{avatar}}"/>
      {{/avatar}}
      {{#!avatar}}
        <img src="/images/default_avatar.png" height="75" width="75" />
      {{/avatar}}
    {{/author}}

Dies ist offensichtlich nicht richtig, aber die Dokumentation erwähnt so etwas nicht. Das Wort "else" wird nicht einmal erwähnt :(

Warum ist Schnurrbart auch so konstruiert? Wird so etwas als schlecht angesehen? Soll ich gezwungen werden, den Standardwert im Modell selbst festzulegen? Was ist mit den Fällen, in denen das nicht möglich ist?

242
egervari

So machen Sie es, wenn/else in Moustache (perfekt unterstützt):

{{#repo}}
  <b>{{name}}</b>
{{/repo}}
{{^repo}}
  No repos :(
{{/repo}}

Oder in deinem Fall:

{{#author}}
  {{#avatar}}
    <img src="{{avatar}}"/>
  {{/avatar}}
  {{^avatar}}
    <img src="/images/default_avatar.png" height="75" width="75" />
  {{/avatar}}
{{/author}}

Suchen Sie in den Dokumenten nach umgekehrten Abschnitten: https://github.com/janl/mustache.js

467
Eneko Alonso

Dies ist etwas, das Sie in der "Steuerung" lösen, die den Punkt des logischen Schablonenlosen Schablonierens darstellt.

// some function that retreived data through ajax
function( view ){

   if ( !view.avatar ) {
      // DEFAULTS can be a global settings object you define elsewhere
      // so that you don't have to maintain these values all over the place
      // in your code.
      view.avatar = DEFAULTS.AVATAR;
   }

   // do template stuff here

}

Dies ist tatsächlich VIEL besser als die Pflege von Bild-URLs oder anderen Medien, die sich in Ihren Vorlagen möglicherweise ändern oder nicht, aber gewöhnungsbedürftig sind. Der Punkt ist, die Tunnelsicht der Vorlagen zu verlernen. Eine Avatar-URL muss in anderen Vorlagen verwendet werden. Möchten Sie diese URL für X-Vorlagen oder ein einzelnes DEFAULTS-Einstellungsobjekt beibehalten? ;)

Eine andere Option ist Folgendes:

// augment view
view.hasAvatar = !!view.avatar;
view.noAvatar = !view.avatar;

Und in der Vorlage:

{{#hasAvatar}}
    SHOW AVATAR
{{/hasAvatar}}
{{#noAvatar}}
    SHOW DEFAULT
{{/noAvatar}}

Aber das widerspricht der ganzen Bedeutung von logischem Templating. Wenn Sie dies tun möchten, möchten Sie logisches Templating und sollten Moustache nicht verwenden, obwohl Sie selbst eine faire Chance haben, dieses Konzept zu erlernen;)

52
BGerrissen

Ihre else -Anweisung sollte folgendermaßen aussehen (beachten Sie das ^):

{{^avatar}}
 ...
{{/avatar}}

Im Schnurrbart wird dies als "invertierte Abschnitte" bezeichnet.

14
anonym