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