Используйте Handlebars.js с Backbone.Marionette

Можно ли использовать Handlebars.js с расширением Backbone.Marionette без переопределения функции рендеринга Views? Кажется, что Marionette полагается на соглашение, в котором вы используете Backbone.js с шаблоном шаблонов подчеркивания. Но мне очень нравится подход к рулю, поэтому я спрашиваю, могу ли я использовать инструменты Marionette с ручками высокого уровня с рулями.

Ответ 1

Простым способом использования Handlebars с Marionette является просто определение template в каждом представлении как предварительно скомпилированную функцию шаблона Handlebars. Например:

var MyView = Backbone.Marionette.ItemView.extend({
    template: Handlebars.compile("Hello, {{name}}"),
    model: new Backbone.Model({name: "Steve"})
});

Marionette default Renderer обнаружит, что атрибут template является функцией и будет называть его соответствующим образом.

См. также официальную документацию по этому делу: https://github.com/marionettejs/backbone.marionette/wiki/Using-handlebars-templates-with-marionette

и другой Q/A с requirejs + Marionette + Handlebars precompiled: Использование предварительно скомпилированных шаблонов рулей с Marionette

Ответ 2

@brettjonesdev верен, но еще одно дополнение, которое я нашел, работало хорошо:

var MyView = Backbone.Marionette.ItemView.extend({
  template: Handlebars.compile($("#assign-products-main-view").html()),
  model: new Backbone.Model({name: "Steve"})
});

Это помогает при поиске в DOM.

Ответ 3

Мы также можем использовать предварительно скомпилированные шаблоны.

var MyView = Backbone.Marionette.ItemView.extend({
template: Handlebars.templates['filename'],
model: new Backbone.Model({name: "Steve"})
});

Таким образом, мы можем удалить роль компиляции из Marionette.

Ответ 4

В текущих двух ответах не используется кэширование. Используйте этот gist вместо.