7

我正在开发一个 Backbone.js 应用程序。我们正在使用 underscore.js 模板将内容加载到视图中。目前我们在 index.html 文件中拥有所有模板,因此文件的大小正在增加。谁能帮我找到将这些模板与其他文件分离的解决方案?提前致谢。

编辑

最近我访问了Backbone 模式,发现我们可以使用JST 模板为每个模板创建单独的模板文件。他们解释说我们可以创建一个jst.js文件来放置我们所有的模板代码:

// http://myapp.com/javascripts/jst.js
window.JST = {};

window.JST['person/contact'] = _.template(
    "<div class='contact'><%= name %> ..."
);

window.JST['person/edit'] = _.template(
   "<form method='post'><input type..."
);

<script src="http://myapp.com/javascripts/jst.js"></script>

现在所有模板都在jst.js文件中。但是,如果您有很多模板并且想要将模板移动到单独的文件中,您可以创建单独的模板文件:

// http://myapp.com/javascripts/jst.js
window.JST = {};

//http://myapp.com/javascripts/contactPerson.template.js
window.JST['person/contact'] = _.template(
    "<div class='contact'><%= name %> ..."
);

//http://myapp.com/javascripts/editPerson.template.js
window.JST['person/edit'] = _.template(
   "<form method='post'><input type..."
);

<script src="http://myapp.com/javascripts/jst.js"></script>
<script src="http://myapp.com/javascripts/contactPerson.js"></script>
<script src="http://myapp.com/javascripts/editPerson.js"></script>

请让我知道是否有任何更简单的想法。谢谢!

4

2 回答 2

7

您可以在单独的 html 文件中拥有模板,并可以使用requirejs将它们作为文本加载。有一个名为text的插件可以帮助您做到这一点。

例子:

define([
  'text!templates/sampleTemplate.html'
], function(tmpl){

    var Sampleview = Backbone.View.extend({
      id: 'sample-page',

      template: _.template(tmpl),

      render: function() {
        $(this.el).html(this.template());
        return this;
     }
  });
  return SampleView;
});

html 文件“templates/sampleTemplate.html”将取自 require.js 配置中指定的根路径

于 2013-06-11T11:23:02.850 回答
1

通过加载它们xhr。lib requirejs (requirejs.org) 以这种方式加载 html 文件依赖项。这将在开发中起作用,但模板应在生产中编译到 js 文件中。

于 2012-04-06T00:25:29.350 回答