Я хочу дать своим пользователям возможность создавать шаблоны документов (контракты, письма и т.д.)Метеор, как сохранить шаблоны в Монго
Самый лучший вариант, я понял бы хранить эти шаблоны документов в Монго (возможно, я ошибаюсь ...)
Я искал пару часов, но не могу понять, как сделать этот шаблон документа с их контекстом данных.
Пример:
Template stored in Mongo: "Dear {{firstname}}"
data context: {firstname: "Tom"}
На сайте Тома, он должен читать: "Дорогой Том"
Как я могу это сделать?
EDIT
После некоторых исследований я обнаружил пакет под названием spacebars-компилятор, который приносит возможность компилировать клиенту:
meteor add spacebars-compiler
Я тогда пытался что-то вроде этого:
Template.doctypesList.rendered = ->
content = "<div>" + this.data.content + "</div>"
template = Spacebars.compile content
rendered = UI.dynamic(template,{name:"nicolas"})
UI.insert(rendered, $(this).closest(".widget-body"))
но не работает.
шаблон компилируется, но затем я не знаю, как интерпретировать его с его контекстом данных и отправить его обратно на веб-страницу.
EDIT 2
Я получаю ближе благодаря Тому.
Это то, что я сделал:
Template.doctypesList.rendered = ->
content = this.data.content
console.log content
templateName = "template_#{this.data._id}"
Template.__define__(templateName,() -> content)
rendered = UI.renderWithData(eval("Template.#{templateName}"),{name:"nicolas"})
UI.insert(rendered, $("#content_" + this.data._id).get(0))
Это работает за исключением того, что имя не вводится в шаблон. UI.renderWithData делает шаблон, но без контекста данных ...
Невозможно; см. http://stackoverflow.com/a/24743280/586086. Шаблоны в настоящее время скомпилированы на сервере, когда начинается Meteor, и вам придется отправить скомпилированную версию всем подключенным клиентам. Хорошая идея, хотя, если Meteor отправил шаблоны над публикациями, чтобы клиенты могли создавать новые шаблоны и делиться ими. –
По-видимому, можно скомпилировать клиентскую сторону (см. Мое редактирование выше), но затем я застрял. Как я могу это сделать? – ndemoreau
Почему бы вам просто не использовать 'Template [templateName]' вместо более запутанного 'eval (" Template. # {TemplateName} ")'? То, что вы делаете, должно работать, но убедитесь, что вы только определили шаблон один раз. –