我需要捆绑客户端模板供其他人用作主干组件库的一部分。我不能使用 RequireJS 或任何其他 AMD 解决方案。
我的想法是将所有 HTML 模板组合到一个 isgle JS 文件中,该文件定义了包含模板的变量。然后有人只需要这样做:
<script type="text/javascript" src="/js/templates.js"></script>
templates.js 可能看起来像
var ns = ns || {};
ns.templates = {};
ns.templates['my-special-list'] = "<% _.each(stuff, function(model) { %><li><% print(model.get('title')); %></li><% }); %>";
那么我的观点可以做这样的事情:
var V = Backbone.View.extend({
initialize: function() {
if (_.isUndefined(this.template)) {
this.template = _.template(ns.templates['my-special-list']);
} else {
this.template = _.template(this.template);
}
}
render: function() {
this.$el.html(this.template.render(this.options));
}
}
这个想法似乎奏效了。仍然允许人们毫不费力地传递他们自己的模板,同时仍然让我在构建时将所有模板合并到一个 HTML 文件中。
话虽如此,但我感觉到将所有这些结合在一起的复杂性。对于初学者,每个新行都需要转换为 \n、转义字符等。
老实说,我想不出另一种方法来做到这一点。我尝试用谷歌搜索并没有看到太多帮助。RequireJS 只是提供了一种加载文本的好方法,但这对我没有多大帮助。
有没有更好的方法来完成我想要的,或者我的方法是否尽可能好?