Как использовать шаблоны 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 4

2 ответа:

В документах есть раздел, в котором также показано несколько примеров замены механизма визуализации:

Http://derickbailey.github.com/backbone.marionette/#backbone-marionette-renderer/custom-template-selection-and-rendering

Видя, что 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>";
    }
});