Was ist der beste Weg, um einen Switch Case in einer Vorlage zu behandeln (zB: eine Schaltfläche mit 4 möglichen Zuständen)? Es scheint falsch die HTML-out in einen Helfer zu ziehen, aber es fühlt sich genauso schlecht die Logik in die Vorlage zu setzen ...Umgang mit Switch Cases in Meteor Templates
Edit:
Wie Sie sehen können, setzt die html in einem helper ist alles andere als ideal, aber das Ändern einer Klasse, eines Tag-Namens, von Eigenschaften und Inhalten würde die Vorlage völlig unlesbar machen.
Template.nextMeetup.helpers({
rsvpButton: function(rsvp) {
var button;
switch(rsvp){
case 'yes':
button = '<a ' + this.event_url + 'class="rsvp btn btn-success pull-right" title="visit event page" target="_blank"><i class="icon-check"></i> I\'m Attending</a>';
break;
case 'maybe':
button = '<a ' + this.event_url + 'class="rsvp btn btn-warning pull-right" title="visit event page" target="_blank"><i class="icon-warning-sign"></i> I might go</a>';
break;
case 'no':
button = '<a ' + this.event_url + 'class="rsvp btn btn-danger pull-right" title="visit event page" target="_blank"><i class="icon-remove"></i> I\'m not going</a>';
break;
case 'none':
button = '<a ' + this.event_url + 'class="rsvp btn btn-inverse pull-right" title="visit event page" target="_blank"><i class="icon-spinner"></i> I havn\'t decided</a>';
break;
default:
button = '<button class="rsvp signIn btn btn-disabled pull-right">Sign in to RSVP</button>';
}
return new Handlebars.SafeString(button);
}
});
Vielen Dank für die eingehende Antwort, aber wie ich befürchtet die Antwort scheint zu sein: es gibt keinen guten Weg :(Der if/else/Schalter in der Mitte der Vorlage sieht schon ziemlich chaotisch aus, und das ist mit nur eine einzige Eigenschaft ändert sich (ich beabsichtige Klassen, Eigenschaften und Inhalt). Der "Schalterhelfer" sieht vernünftiger aus, wirkt aber spröde und künstlich. Ich glaube, ich hatte gehofft, dass es eine gängige Praxis gibt, so etwas zu handhaben. – Sinetheta
Sie können Inhalt weiterhin von Logik trennen. Sie können eine Reihe von Subtemplates (Partials) für jede Ihrer Schaltflächen erstellen. Dann, wenn Sie Ihren Helfer verwenden möchten, ersetzen Sie die HTML-Zeichenfolgen mit 'Template.btnYes ({rsvp: rsvp})' oder 'Meteor.render (function() {Template.btnYes ({rsvp: rsvp})})'. Oder machen Sie eine teilweise aufgerufene Schaltfläche, die den hässlichen if-else-Block verwendet, und fügen Sie Teilunterteilungen für jede Schaltfläche hinzu. Fügen Sie es über '{{> button}}' ' –
ein Ich dachte nie, eine Vorlage von innerhalb eines Helfers zu verweisen, danke, ich denke, dass das gut funktionieren wird. – Sinetheta