Underscore.js:未捕获的ReferenceError:未定义数据

rob*_*rob 2 javascript jquery backbone.js underscore.js underscore.js-templating

我正在尝试使用Underscore.js forEach方法将对象列表加载到模板中:

HTML模板代码:

<script type="text/template" id="element">
    <% _.each(data, function (element) { %>
        <div class="col-xs-12 col-sm-12 col-md-4" id="inner-element">
            <div class="thumbnail">
                <img class="img-responsive" src="../../../img/<%= element.img %>" alt="...">
                <div class="caption">
                    <h3 class="menu-food-name"><%= element.name %></h3>
                    <p class="menu-food-description"><%= element.description %></p>
                    <p class="menu-food-price text-right"><span class="label label-info" role="button"><%= element.price %></span></p>
                </div>
            </div>
        </div>
    <% }); %>
</script>
Run Code Online (Sandbox Code Playgroud)

使用Javascript:

var elementTemplate = _.template($('#element').html(), {data: item});
that.$el.append(elementTemplate);
Run Code Online (Sandbox Code Playgroud)

"item"之前被定义为一个对象数组,其中包含三个元素,其中包含我希望在模板中显示的属性(名称,描述,价格和img)(如console.log(item)中所示):

Object {0: Object, 1: Object, 2: Object}
    0: Object
        description: "grilled portobello and balsamic"
        img: ""
        name: "fungi grigliati"
        price: "7.95"
        __proto__: Object
    1: Object
        description: "baked clams"
        img: ""
        name: "vongole oreganate"
        price: "7.95"
        __proto__: Object
    2: Object
        description: "mussels marinara sauce"
        img: ""
        name: "padellata di cozze"
        price: "13.95"
        __proto__: Object
__proto__: Object
Run Code Online (Sandbox Code Playgroud)

当我尝试运行此代码时,我一直在开发控制台中收到"未捕获的ReferenceError:数据未定义"错误.我想我可能会忽略Underscore forEach方法的工作原理.我假设我传递的数据可能没有正确格式化.任何想法/帮助都会很棒.

Mat*_*ics 8

错误就在那里,data没有定义.这与此无关_.each; 相反,你使用_.template不正确.

第二个参数是templateSettings,而不是数据.您将数据传递给返回的函数_.template.

// create template function
var elementTemplate = _.template($('#element').html());
// render the template with the given data
that.$el.append(elementTemplate({data: item}));
Run Code Online (Sandbox Code Playgroud)

  • 我正在学习许多教程,他们都在教导将数据传递给_.template方法.那没用.但正如你所说,将数据放入返回的函数中,效果非常好.非常感谢. (3认同)
  • @FábioGomideNolasco:Underscore在1.7.0上更改了_.template()的定义.较旧的版本接受`_.template(templateString,[data],[settings])`,而最近的版本只接受`_.template(templateString,[settings])`. (3认同)