他の人がバックボーン コンポーネントのライブラリの一部として使用できるように、クライアント側のテンプレートをバンドルする必要があります。RequireJS やその他の AMD ソリューションを使用できません。
私が考えたアイデアは、すべての HTML テンプレートを、テンプレートを含む変数を定義する単一の 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));
}
}
このアイデアはうまくいくようです。ビルド時にすべてのテンプレートを 1 つの HTML ファイルに結合できるようにしながら、ユーザーは独自のテンプレートを簡単に渡すことができます。
とはいえ、これらすべてが組み合わさった複雑さを感じます。まず、すべての新しい行を \n に変換したり、文字をエスケープしたりする必要があります。
正直なところ、それを行う別の方法は考えられません。グーグルで調べてみましたが、役立つものはあまりありませんでした。RequireJS はテキストを読み込むための優れた方法を提供するだけですが、これは私にとってはあまり役に立ちません。
私が望むものを達成するためのより良い方法はありますか、それとも私のアプローチはそれと同じくらい良いですか?