到目前为止,我一直在我的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
答案 0 :(得分:10)
文档中有一节显示了几个替换渲染机制的示例:
看到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>";
}
});