Усы не имеют логики, поэтому вы ничего не можете сделать с чистым шаблоном кода, кроме переключения на Рули .
Ваша альтернатива для усов - объявить помощника и использовать его для выбора шаблона для рендеринга. Это становится немного запутанным, но вы можете избежать перехода от Усов, если это то, что вы не можете изменить:
var base_template = '{{#events}}' +
'{{{event_renderer}}}' +
'{{/events}}';
var message_template = '<div>message: {{title}}</div>';
var image_template = '<div>image: {{title}}</div>';
var data = {
events: [ {title: 'hello', type: 'message'}, {title: 'world', type: 'image'} ],
event_renderer: function() {
return Mustache.render('{{> ' + this.type + '}}', this, {message: message_template, image: image_template});
}
}
Mustache.render(base_template, data);
Хитрость в том, что вы создаете базовый шаблон, который будет итератором, и передаете event_renderer
в качестве помощника. Этот помощник, в свою очередь, снова вызовет Mustache.render, используя партиалы для визуализации каждого типа события, которое вы можете иметь (это нотация {{> частичный}}).
Единственная уродливая часть здесь - это то, что вам нужно добавить этот event_renderer
член к вашим данным JSON, но в остальном все должно быть хорошо (в Handlebars вы можете объявить его как помощника, и нет необходимости объединять это с вашими данными).