以相反的顺序回答问题:
有一个更好的方法吗?
似乎有一个现有的实现,您可能想考虑使用它而不是自己编写。尽管简单的案例是少量代码,但您最终可能需要一堆与 r.js 优化器相关的东西。
但是关于你的实现逻辑,我注意到这个类似的 Handlebars 项目没有使用文本!插件,而是在 load() 方法中执行自己的 XHR。这没有解释,但他给出了一些指导以使其适应其他模板语言。注意:链接来自这个问题,那里有一些关于该方法的其他很好的讨论。
我怎么能停止文字!从添加分号?
我尝试了您的插件,但没有添加任何分号。也许您可以发布更多示例项目和模板?下面是我的,为简单起见,所有内容都放在一个平面文件夹中:
require.js:来自 RequireJS 站点的最新版本
domReady.js: RequireJS 站点的最新版本
text.js: RequireJS 网站的最新版本
lodash.js:来自 lodash 网站的最新版本
tmpl.js:问题中的示例加载器
索引.html:
<!DOCTYPE html>
<html>
<head>
<script src='require.js'></script>
<script>
requirejs.config({
map: {
'*': { 'underscore': 'lodash' }
}
});
require( [ 'underscore', 'tmpl!friend-template.htm', 'domReady!' ]
, function( _, friendTemplate ){
var friendsData = [{ name: 'Bob', age: 35 }, { name: 'Fred', age: 38 }];
document.body.innerHTML = friendTemplate( {friends: friendsData});
});
</script>
</head>
<body>
<!-- To be populated dynamically. -->
</body>
</html>
朋友模板.htm:
<ul>
<% _.forEach(friends, function(friend) { %>
<li>
<span><%- friend.name %></span>
<span>( Age: <span class="value"><%- friend.age %></span> )</span>
</li>
<% }); %>
</ul>