【问题标题】:undefined local variables in templates模板中未定义的局部变量
【发布时间】:2013-01-09 21:46:22
【问题描述】:

我正在关注本教程(仅限法语)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 帮助器包含了特定于页面的内容。

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

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>

【问题讨论】:

标签: backbone.js


【解决方案1】:

问题在于 Underscore 使用与 ERB 相同的模板语法,因此存在冲突。您需要告诉 Underscore 使用不同的语法。来自下划线文档:

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

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

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

然后,在模板中您拥有&lt;% %&gt; 的任何位置,将其更改为{{ }},将&lt;%= %&gt; 更改为{{= }},并将&lt;%- %&gt; 更改为{{- }}

【讨论】:

    【解决方案2】:

    您可以使用&lt;%%= variable %&gt;。 Rails 的输出将是&lt;%= variable %&gt;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-04
      • 2012-03-29
      • 2013-04-29
      • 2013-04-24
      • 2018-08-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多