如何在backbone.marionette中使用EJS模板?

时间:2012-04-16 18:08:49

标签: templates backbone.js ejs marionette

到目前为止,我一直在我的Rails / Backbone.js应用程序中使用EJS模板。 我真的想开始使用backbone.marionette。我该怎么做才能使它与EJS一起使用?

MyView = Backbone.Marionette.ItemView.extend({
  template: "#some-template"
});

它在文档中说我需要为template属性提供jQuery选择器,但我不认为我的EJS模板有一个。

更新

这就是我使用模板正常渲染视图的方法:

TasksTree.Views.TaskItem = Backbone.View.extend({
...
  render: function() {
    ...
    this.$el.html(JST['tasks_tree/item'](options));
    return this;
  }

})

我有item.jst.ejs文件的模板文件夹,如下所示:

<li>
  <label><%= taskTitle %></label>
</li>

我的模板文件夹包含在application.js

2 个答案:

答案 0 :(得分:10)

文档中有一节显示了几个替换渲染机制的示例:

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

看到JST为您提供模板,并且您不需要以任何其他方式缓存它们,但是,您可以跳过Marionette的Renderer对象内置的大部分功能并替换{ {1}}完全发挥作用。

render

您还可以使用模板路径而不是jquery选择器替换视图上的teh Backbone.Marionette.Renderer.render = function(template, data){ return JST[template](data); } 属性:

template

希望有所帮助。如果没有,请告诉我。

答案 1 :(得分:1)

我发现此引用非常有用: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>";
    }
});