Cách tốt nhất để xử lý một trường hợp chuyển đổi trong một mẫu (ví dụ: một nút có 4 trạng thái có thể) là gì? Có vẻ như sai để kéo html ra một helper, nhưng nó cảm thấy giống như xấu để đưa logic vào mẫu ...Cách xử lý các trường hợp chuyển đổi trong các mẫu Meteor
Edit:
Như bạn thấy, đưa html trong một helper là xa lý tưởng, nhưng thay đổi một lớp học, một tên tag, tài sản, và nội dung, sẽ làm cho các mẫu hoàn toàn không đọc được.
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);
}
});
Cảm ơn bạn đã trả lời sâu, nhưng vì tôi sợ câu trả lời có vẻ là: không có cách nào tốt: (Nếu/else/switch ở giữa mẫu có vẻ khá lộn xộn, và đó là chỉ có một thuộc tính duy nhất thay đổi (tôi dự định đến các lớp, thuộc tính và nội dung). Các "trợ giúp chuyển đổi" có vẻ hợp lý hơn, nhưng có vẻ giòn và contrived. Tôi đoán tôi đã hy vọng có một thực tế phổ biến để xử lý một cái gì đó như thế này. – Sinetheta
Bạn vẫn có thể tách nội dung khỏi logic. Bạn có thể tạo một tập hợp các subtemplates (partials) cho mỗi nút của bạn. Sau đó, nếu bạn muốn sử dụng trình trợ giúp của bạn, hãy thay thế các chuỗi HTML bằng 'Template.btnYes ({rsvp: rsvp})' hoặc 'Meteor.render (function() {Template.btnYes ({rsvp: rsvp})}) '. Hoặc thực hiện một phần được gọi là 'nút' sử dụng khối if-else xấu xí và bao gồm các partial partials cho mỗi nút. Bao gồm nó thông qua '{{> button}}' –
Tôi không bao giờ nghĩ rằng để tham khảo một mẫu từ bên trong một người trợ giúp, cảm ơn, tôi nghĩ rằng sẽ làm việc tốt. – Sinetheta