1

我正在使用 requirejs 插件来定义“tmpl!” loader(不是 jquery 模板,而是 lodash 模板。问题是文本!加载器在模板的末尾添加了一个“;”。这正在渲染并且正在破坏一切。

(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);

我怎么能停止文字!从添加分号?或者:有没有更好的方法来做到这一点?

4

2 回答 2

1

我专门为 Lo-Dash 创建了一个加载器,你可以在这里看到:

https://gist.github.com/tbranyen/6821045

注意:我没有单元测试或保证没有错误,但从我最初的测试来看,它似乎工作得很好。

这在许多方面都比 requirejs-tpl 更好,后者在它自己的未公开实现中烘焙。它还需要文件扩展名和硬编码路径。这两个都可以在我的代码中配置。

编辑:我已经发布了一个名为的项目lodash-template-loader,其中包含测试。 https://github.com/tbranyen/lodash-template-loader

于 2013-10-04T14:01:31.667 回答
1

以相反的顺序回答问题:

有一个更好的方法吗?

似乎有一个现有的实现,您可能想考虑使用它而不是自己编写。尽管简单的案例是少量代码,但您最终可能需要一堆与 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>
于 2013-06-28T19:48:11.663 回答