Qual è il modo migliore per gestire un caso di commutazione in un modello (ad esempio: un pulsante con 4 stati possibili)? Sembra sbagliato a tirare il codice HTML fuori in un aiuto, ma ci si sente proprio così male a mettere la logica nel modello ...Come gestire gli interruttori in modelli Meteor
Edit:
Come si può vedere, mettendo il codice HTML in un l'helper è lontano dall'ideale, ma cambiare classe, nome di tag, proprietà e contenuto renderebbe il template completamente illeggibile.
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);
}
});
Grazie per la risposta approfondita, ma come temevo la risposta sembra essere: non c'è un buon modo :(L'if/else/switch nel mezzo del modello sembra già piuttosto disordinato, e questo è con solo una singola modifica delle proprietà (intendo classi, proprietà e contenuto). Il "commutatore" sembra più ragionevole, ma sembra fragile e artificioso. Credo che speravo che esistesse una pratica comune per gestire qualcosa di simile. – Sinetheta
È ancora possibile separare il contenuto dalla logica. Puoi creare una serie di sottotasti (parziali) per ciascuno dei tuoi pulsanti. Quindi se vuoi usare il tuo helper, sostituisci le stringhe HTML con 'Template.btnYes ({rsvp: rsvp})' o 'Meteor.render (function() {Template.btnYes ({rsvp: rsvp})})'. Oppure fai un pulsante di chiamata parziale che usa il brutto blocco if-else e includi sub-parziali per ogni pulsante. Includilo tramite '{{button}}' –
Non ho mai pensato di fare riferimento a un modello all'interno di un helper, grazie, penso che funzionerà bene. – Sinetheta