如何为requirejs编写lodash模板加载器

时间:2013-06-27 21:52:19

标签: requirejs underscore.js lodash

我正在使用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);

如何停止文字!从添加分号?或者:有更好的方法吗?

2 个答案:

答案 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