Как использовать шаблоны EJS с магистралью.марионетка?
До сих пор я использовал шаблоны EJS в своих Rails/Backbone.приложение js. Я действительно хочу начать использовать позвоночник.марионетка . Что я могу сделать, чтобы заставить его работать с EJS?
MyView = Backbone.Marionette.ItemView.extend({
template: "#some-template"
});
В документах говорится, что мне нужно предоставить селектор jQuery для атрибута template
, но я не думаю, что мои шаблоны EJS имеют его.
Обновление:
Вот как я обычно использую шаблоны для отображения моих представлений:
TasksTree.Views.TaskItem = Backbone.View.extend({
...
render: function() {
...
this.$el.html(JST['tasks_tree/item'](options));
return this;
}
})
И у меня есть папка templates с item.jst.ejs
файл, который выглядит так:
<li>
<label><%= taskTitle %></label>
</li>
Моя папка шаблонов включена в application.js
2 ответа:
В документах есть раздел, в котором также показано несколько примеров замены механизма визуализации:
Видя, что JST предоставляет шаблоны для вас, и вам не нужно кэшировать их каким-либо другим способом, вы можете пропустить большую часть функций, встроенных в объект Marionette
Renderer
и заменить функциюrender
полностью.Backbone.Marionette.Renderer.render = function(template, data){ return JST[template](data); }
Вы также заменили бы использование атрибута teh
template
в представлениях путем шаблона вместо селектора jquery:Надеюсь, это поможет. Если нет, дайте мне знать.Backbone.Marionette.ItemView.extend({ template: "tasks_tree/item" });
Я нашел эту ссылку весьма полезной: https://github.com/marionettejs/backbone.marionette/wiki/Using-jst-templates-with-marionette
Вы можете заменить функцию
render
чем-то подобным, что обеспечивает лучшую обработку ошибок и гибкость.Marionette.Renderer.render = function(template, data) { if(typeof template === 'function') { return template(data); } else { if(!JST[template]) throw "Template '" + template + "' not found!"; return JST[template](data); } };
Затем вы можете указать путь к шаблону (как упоминалось ранее):
Backbone.Marionette.ItemView.extend({ template: "tasks_tree/item" });
Или если ваш шаблон очень прост, вы можете использовать функцию для возврата только строки:
Backbone.Marionette.ItemView.extend({ template: function(data) { return "<div>" + data.attribute + "</div>"; } });