我在我看来使用.ejs模板。 但由于某些原因的看法不会加载指定的模板。 它返回undefined。 下面的代码:
sandplate2.applicationView = Backbone.View.extend({
el: 'div',
template: _.template($("appl.ejs").html()),
initialize: function(){
console.log("Application view initialize");
_.bindAll(this, "render");
this.render();
},
render: function(){
console.log("Application view rendering");
this.$el.html(this.template());
return this;
}
});
我一定要配置别的东西,以加载模板?
我用约曼结构我的应用程序。 我用了init和骨干发电机。
仅供参考 - 我试图加载模板被加载在使用脚本元素中的index.html。
如果你建造它使用约曼,看看app.js看到,如果你正在使用Backbone.LayoutManager 。 您可能需要更改配置那里EJS工作。 默认情况下,我认为它应该被期待下划线的模板。
我使用的把手 ,我更新了我的app.js看起来像这样:
Backbone.LayoutManager.configure({
manage: true,
paths: {
layout: "templates/layouts/",
template: "templates/"
},
fetch: function(path) {
path = path + ".html";
if (!JST[path]) {
$.ajax({ url: app.root + path, async: false }).then(function(contents) {
JST[path] = Handlebars.compile(contents);
});
}
return JST[path];
}
});
我还添加把手到模块的定义()调用,通过在“把手”作为参考。 您可能需要做EJS类似的东西。
请尝试最新骨干genearator与自耕农1.0beta。 我们已经取得了很多关于它的改进,包括预编译EJS模板 。 你不想担心模板,自耕农将预编译并加载它。
对于输入视样品生成的代码在下文提供。
Todo.Views.InputView = Backbone.View.extend({
template: JST['app/scripts/templates/input.ejs'],
render: function(){
$(this.el).html(this.template());
}
});
抛开惯例,它看起来像这个问题简直是你的jQuery查找。
_.template($("appl.ejs")...
$('appl.ejs')
不是一个有效的DOM选择,除非你在你的index.html有一个这样的元素
<appl class="ejs"></appl>
如果你正在尝试的目标与jQuery你的模板,给它一个ID或东西的jQuery可以找到像这样:
<script type="text/template" id="appl">
<div></div><!-- template html here -->
</script>
// later...
$('#appl').html()
// will get your template html
然而,正如其他人所提到的,在一个自耕农和require.js工作流程,你可以问require.js为文本,您将获取模板并创建一个下划线模板之前把它周围的一个变量。