0

我正在关注本教程(仅限法语)https://github.com/k33g/articles/blob/master/2011-08-14-BB-VIEWS.md,它使用带有 Backbonejs 的下划线模板。

该教程说将此模板放在索引文件中。

      <script type="text/template" id="doc-template">
            <span><%= id %></span>
            <span><%= title %></span>
            <span><%= test %></span>
            <span><%= keywords %></span>
       </script>


   <div id='doc-container'></div>

我将它放在 index.html.erb 中,但是,教程作者没有使用 rails。我有必要使用 erb,因为我还使用 rails content_for helpers 包含页面特定内容。

当我尝试查看页面时,我收到未定义的局部变量或方法错误

undefined local variable or method `id' for #<#<Class:0x007fd9c3a133b8>:0x007fd9c5066d90>

如果我从模板中删除这些变量,它仍然不会将内容呈现到页面。

谁能解释我在渲染数据方面做错了什么?

其他Backbone视图相关代码

本教程在适当的容器中初始化并呈现视图...

        el : $('#doc-container'),
        initialize : function() {
            this.template = _.template($('#doc-template').html());


            _.bindAll(this, 'render');
            this.model.on('change', this.render);

        },

        render : function() {
            var renderedContent = this.template(this.model.toJSON());
            $(this.el).html(renderedContent);
            return this;
        }

更新

当我按照集合视图的教程说明进行操作时,我遇到了同样的问题。下划线的 each 方法会引发错误

undefined local variable or method `_' for #<#<Class:0x007fd9c3a133b8>:0x007fd9c2c78a78>

index.html.erb 中的模板

<script type="text/template" id="docs-collection-template">
    <ol>
      <% _.each(docs, function(doc) { %>
        <li><%= doc.id %> : <%= doc.title %></li>
      <% }); %>
    </ol>
</script>
4

2 回答 2

3

问题是 Underscore 使用与 ERB 相同的模板语法,所以它是冲突的。您需要告诉 Underscore 使用不同的语法。来自下划线文档:

如果 ERB 样式的分隔符不是您喜欢的,您可以更改 Underscore 的模板设置以使用不同的符号来衬托内插代码。定义一个插值正则表达式以匹配应逐字插入的表达式,一个转义正则表达式以匹配应在 HTML 转义后插入的表达式,以及一个评估正则表达式以匹配应在不插入结果字符串的情况下计算的表达式。您可以定义或省略这三者的任意组合。例如,执行 Mustache.js 样式模板。

因此,在您的 JavaScript 代码中的某处,在您编译模板之前,添加以下代码:

_.templateSettings = {
    interpolate : /\{\{=(.+?)\}\}/g,
    escape : /\{\{-(.+?)\}\}/g,
    evaluate: /\{\{(.+?)\}\}/g,
};

然后,在您拥有的模板中的任何位置<% %>,将其更改为{{ }}、更改<%= %>{{= }}和更改<%- %>{{- }}

于 2013-01-09T22:13:49.980 回答
0

您可以使用<%%= variable %>. Rails 的输出将是<%= variable %>.

于 2014-04-09T21:22:26.843 回答