将Handlebars.js与Backbone.Marionette一起使用

时间:2013-03-29 13:08:33

标签: backbone.js handlebars.js marionette

是否可以使用带有Backbone.Marionette扩展名的Handlebars.js而无需重新实现Views渲染功能?似乎Marionette依赖于你使用带有下划线模板引擎的Backbone.js的约定。但我真的很喜欢把手的方法,所以我问我是否可以使用把手来装木偶的高级工具。

4 个答案:

答案 0 :(得分:24)

在Marionette中使用Handlebars的一种简单方法就是将每个View中的template定义为预编译的Handlebars模板函数。例如:

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

Marionette的默认Renderer会检测到template属性是一个函数,并会相应地调用它。

另请参阅有关此案例的官方文档:https://github.com/marionettejs/backbone.marionette/wiki/Using-handlebars-templates-with-marionette

和另一个带有requirejs + Marionette + Handlebars的Q / A预编译:Using precompiled handlebars templates with Marionette

答案 1 :(得分:6)

@brettjonesdev是正确的,但我发现其他另外一个很好用的是:

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

这有助于搜索DOM。

答案 2 :(得分:3)

我们也可以在这里使用预编译模板。

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

这样我们就可以从Marionette中删除编译角色。

答案 3 :(得分:2)

目前的两个答案都没有利用缓存。使用此要点instead.