Динамический рендеринг частичных шаблонов с использованием усов

Есть ли способ динамически внедрять частичные шаблоны (и чтобы они работали одинаково как в Ruby, так и в Javascript)? По сути, я пытаюсь отображать разные типы объектов в списке.

Лучшее, что я могу придумать, это:

<div class="items">
{{#items}}
<div class="item">
  {{#is_message}}
  {{> message}}
  {{/is_message}}

  {{#is_picture}}
  {{> picture}}
  {{/is_picture}}
</div>
{{/items}}
</div>

Я не в восторге от такого подхода. Есть ли способ лучше?

Также обратите внимание, что разные типы моделей для представлений могут иметь разные поля. Я полагаю, что всегда мог бы перейти к наименьшему общему знаменателю и иметь хэш данных, содержащий html, однако я бы предпочел использовать шаблоны усов.


person Brian Takita    schedule 28.05.2010    source источник
comment
Вы когда-нибудь находили решение? Я думаю о том, чтобы вызвать Mustache.render внутри одного из логических методов и вернуть результат.   -  person Jeremy    schedule 21.11.2010
comment
Да, это то, что я начал делать. Отобразить шаблон и внедрить его в переменную.   -  person Brian Takita    schedule 09.03.2011


Ответы (1)


Я сделал то же самое, что и вы, и для каждого типа свойства мне нужно было динамическое частичное, я просто установил динамическую переменную в модели данных js, которая отображается в шаблоне...

eval("this.set({is_" + this.get("propertyType") + ": true})")

or

this["is_" + propertyType] = true

По крайней мере, мне не нужно вручную устанавливать переменную is_whatever...

Было бы здорово, если бы mustache.js или ICanHaz.js имели какой-нибудь умный синтаксис для динамических свойств внутри тегов усов... может быть, что-то вроде этого:

{{>{{message}} }}
person Dan Tocchini    schedule 11.01.2011