问题
由于性能原因,我需要使用下划线模板而不是默认的 KnockoutJS 模板引擎。但是,由于我在 asp.net 环境中,并且由于 asp.net 处理程序的原因,默认标记<%
和%>
将不起作用。
我需要的是应用以下内容:
_.templateSettings = {
interpolate : /\{\{(.+?)\}\}/g
};
使其使用{{
and}}
标签
注 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 等)。
如果您不喜欢<%= ... %>
分隔符,您可以将下划线模板引擎配置为使用您选择的任何其他分隔符。
从上面的粗体文档
它声明我可以更改分隔符,但没有具体说明如何做到这一点......
当前尝试
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">