Javascript 在主干js中按URL加载模板

Javascript 在主干js中按URL加载模板,javascript,ajax,backbone.js,Javascript,Ajax,Backbone.js,我在主干中创建了一个视图来渲染集合。它使用一个模板来格式化数据,模板HTML被写在一个字符串变量中。现在模板变得越来越复杂,我需要将其存储在单独的文件中。主干网中是否有从URL加载模板的方法?在这种情况下,什么是最好的设计模式。代码如下: var PageView = Backbone.View.extend({ template: _.template("<% _.each(items,function (item) { %><tr><td><

我在主干中创建了一个视图来渲染集合。它使用一个模板来格式化数据,模板HTML被写在一个字符串变量中。现在模板变得越来越复杂,我需要将其存储在单独的文件中。主干网中是否有从URL加载模板的方法?在这种情况下,什么是最好的设计模式。代码如下:

var PageView = Backbone.View.extend({
    template: _.template("<% _.each(items,function (item) { %><tr><td><%= item.page_id %></td><td><%= item.title %></td></tr><% }); %>"),

    initialize: function () {
        _.bindAll(this, 'render');
        this.model.bind('all', this.render);
    },

    render: function () {
        this.$el.html(this.template({
            items: this.model.toJSON()
        }));
    }

});
var PageView=Backbone.View.extend({
模板:u.template(“”),
初始化:函数(){
_.bindAll(这是“呈现”);
this.model.bind('all',this.render);
},
渲染:函数(){
this.$el.html(this.template({
条目:this.model.toJSON()
}));
}
});

是否有类似于templateURL的东西,以便可以从服务器上的另一个文件动态加载它。

我会使用require.js来实现这一点,一开始它可能感觉有些过火,但最终它将获得巨大的回报


主干网本身并没有提供实现这一点的方法,但有许多不同的方法可以实现这一点,并且有很多关于如何设置所需机制的示例

如果你选择使用RequireJs(我建议你最终这样做……考虑到你需要一些时间来学习),你还需要RequireJs的文本插件。有一个关于在主干项目中使用RequireJS和文本插件的教程,可从以下站点获得

设置项目后,在主干视图中加载外部模板非常简单,只需将它们定义为视图的依赖项并将该依赖项传递给变量(以下示例中为projectListTemplate):

另一种可能的方法是,如果您觉得还没有准备好使用RequireJS,并且希望立即将模板移动到不同的文件,那么可以使用一个简单的自定义模板加载程序。Christophe Coenraets编写了自己的,并将其用于一个示例主干项目中。他在github上提供了所有源代码,并提供了教程和解释


他在第一节“外部化模板”中写道,ReuireJS是一个很好的方法,但有点过分,此外,我们还使用了一个requireJS插件——我决定不使用它。 我的解决方案是使用JQuery$。在加载视图之前获取模板HTML,然后使用结果加载在构造函数中定义模板的视图,然后作为选项调用。模板:

var template = $.get("/templates/needed_template.html")
                        .done(function (res) {
                            ns.myView = new MyView({template: res});
                            ns.myView.render();
                        })
在视图方面,我添加了以下内容:

initialize: function() {
   this.template = _.template(this.options.template);

这里也有类似的问题。也许你在这里得到了你的解决方案。你考虑过使用requirejs吗?我读过requirejs文档,它符合逻辑,但会使我的应用程序更复杂。第二个很简单,适合我。谢谢
initialize: function() {
   this.template = _.template(this.options.template);