問題
パフォーマンスのために、デフォルトの KnockoutJS テンプレート エンジンの代わりにアンダースコア テンプレートを使用する必要があります。ただし、私はasp.net環境にいるため、asp.netハンドラーが原因で、とのデフォルトのタグは機能<%
し%>
ません。
私が必要とするのは、次のようなものを適用することです:
_.templateSettings = {
interpolate : /\{\{(.+?)\}\}/g
};
{{
と}}
タグを使用する
注 7: Underscore.js テンプレート エンジンの使用
Underscore.js テンプレート エンジンは、デフォルトで ERB スタイルの区切り文字 ( <%= ... %>
) を使用します。前の例のテンプレートがアンダースコアでどのように見えるかを次に示します。
<script type="text/html" id="peopleList">
<% _.each(people(), function(person) { %>
<li>
<b><%= person.name %></b> is <%= person.age %> years old
</li>
<% }) %>
</script>
Underscore テンプレートを Knockout と統合する簡単な実装を次に示します。統合コードの長さはわずか 16 行ですが、Knockout データ バインド属性 (したがってネストされたテンプレート) と Knockout バインディング コンテキスト変数 ($parent、$root など) をサポートするには十分です。
区切り文字が気に入らない場合<%= ... %>
は、選択した他の区切り文字を使用するようにアンダースコア テンプレート エンジンを構成できます。
knockoutjs.comから取得
上記の太字のドキュメントから
区切り文字を変更できると記載されていますが、その方法についての詳細は指定されていません...
現在の試行
ko.underscoreTemplateEngine = function() {
};
ko.underscoreTemplateEngine.prototype = ko.utils.extend(new ko.templateEngine(), {
renderTemplateSource: function (templateSource, bindingContext, options) {
// Precompile and cache the templates for efficiency
var precompiled = templateSource['data']('precompiled');
if (!precompiled) {
precompiled = _.template("<% with($data) { %> " + templateSource.text() + " <% } %>");
templateSource['data']('precompiled', precompiled);
}
// Run the template and parse its output into an array of DOM elements
var renderedMarkup = precompiled(bindingContext).replace(/\s+/g, " ");
return ko.utils.parseHtmlFragment(renderedMarkup);
},
createJavaScriptEvaluatorBlock: function(script) {
return "<%= " + script + " %>";
}
});
ko.setTemplateEngine(new ko.underscoreTemplateEngine());
更新:
上記を使用しなくなりました。jquery、アンダースコア、およびノックアウトを含めるだけです。それからscript
私はただ持っています
_.templateSettings = {
interpolate: /\{\{([\s\S]+?)\}\}/g
};
ただし、何も解析されていません。
テンプレート宣言は
<script type="text/html" id="common-table-template">