我正在使用requirejs插件来定义“tmpl!” loader(不是一个jquery模板,而是一个lodash模板。问题是text!loader在模板的末尾添加了一个“;”。这正在渲染并打破了一切。
(function(global){
"use strict";
define({
load : function(name, require, load, config) {
var deps = [];
deps.push('text!' + name);
deps.push('underscore');
require(deps, function(source, _) {
var template = _.template(source);
load(template);
});
}
});
})(this);
如何停止文字!从添加分号?或者:有更好的方法吗?
答案 0 :(得分:1)
以相反的顺序提问:
有更好的方法吗?
似乎有existing implementation这个,你可能想考虑使用它而不是自己编写。虽然简单的情况是少量的代码,但是最终可能需要一些与r.js相关的优化器。
但是关于你的实现逻辑,我注意到this similar project for Handlebars没有使用文本!插件,但在load()方法中执行自己的XHR。这没有解释,但他给了一些guidance for adapting it to other templating languages。注意:该链接来自this question,其中还有一些关于该方法的其他讨论。
如何停止文字!从添加分号?
我尝试了你的插件,没有添加任何分号。也许你可以发布更多的示例项目和模板?下面是我的,为简单起见,所有内容都在一个平面文件夹中:
require.js:最新来自RequireJS网站
domReady.js:最新来自RequireJS网站
来自RequireJS网站的text.js:最新
lodash.js:最新来自lodash网站
tmpl.js:来自问题的示例加载程序
<强>的index.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>
<强>朋友-template.htm 强>:
<ul>
<% _.forEach(friends, function(friend) { %>
<li>
<span><%- friend.name %></span>
<span>( Age: <span class="value"><%- friend.age %></span> )</span>
</li>
<% }); %>
</ul>
答案 1 :(得分:1)
我已经专门为Lo-Dash创建了一个加载器,你可以在这里看到:
https://gist.github.com/tbranyen/6821045
注意:我没有单元测试或保证没有错误,但从我最初的测试看起来效果很好。
这比requirejs-tpl在很多方面都要好,后者在它自己的实现中加入了未暴露的实现。它还需要文件扩展名和硬编码路径。这两个都可以在我的代码中配置。
编辑:我已经发布了一个名为lodash-template-loader
的项目,该项目有测试。 https://github.com/tbranyen/lodash-template-loader