【问题标题】:underscore template error: function (n){return a.call(this,n,h)} [duplicate]下划线模板错误:函数(n){return a.call(this,n,h)} [重复]
【发布时间】:2014-10-25 09:05:33
【问题描述】:

我正在关注关于 underscoreJS 的视频教程,一切都很顺利,直到我将逻辑放入模板中

SampleData.js 包含学生数组:

var students = [
    {
        "firstname": "Woody",
        "lastname" : "Johnson",
        "school" : "Thoreau",
        "grade" : 12,
        "midterm_score": 75,
        "final_score": 85
    },
    {
        "firstname" : "Jerry",
        "lastname" : "Jones",
        "school" : "Thoreau",
        "grade" : 10,
        "midterm_score": 50,
        "final_score": 65       
    },
    {
        "firstname" : "Bill",
        "lastname" : "Parcells",
        "school" : "Franklin",
        "grade" : 12,
        "midterm_score": 82,
        "final_score": 91       
    },
    {
        "firstname" : "Rex",
        "lastname" : "Ryan",
        "school" : "Franklin",
        "grade" : 11,
        "midterm_score": 60,
        "final_score": 67       
    }];

HTML:

<!DOCTYPE html>
<html>
<head>
    <title>Using Underscore Templates</title>
    <style type="text/css">
    .studentRec {
      border: 1px solid #777;
      margin: 4pt;
      padding: 4pt;
      font-size: 14pt;
      background-color: #ccc;
    }
    .passingStudent {
      background-color: lightGreen;
    }
    .failingStudent {
      background-color: pink;
    }
    </style>
    <script type="text/javascript" src="../underscore.js"></script>
    <script type="text/javascript" src="../SampleData.js"></script>
    <script type="text/javascript">
    function appendTemplateData(dataString) {
        var container = document.getElementById("container");
        container.innerHTML = container.innerHTML + dataString;
    }

    var studentInfo1 = "<% _.each(students, function(item) { %>" + 
                      "<div class='studentRec " +
                      "<% (item.midterm_score + item.final_score) / 2 > 65 ? print('passingStudent') : print('failingStudent') %>'>" +
                      "<span style='font-weight:bold'>Name:</span> <span><%= item.lastname %>, <%= item.firstname %> </span>" +
                      "<span style='font-weight:bold'>School:</span> <span><%= item.school %></span></div>" +
                      "<% }); %>";



    window.addEventListener("load", function(e) {

      var result = _.template(studentInfo1, students);
      appendTemplateData(result);
    });
    </script>
</head>
<body>
<h1>Using Underscore Templates</h1>
<h2>Student Information:</h2>
<div id="container">
</div>
</body>
</html>

结果:

function (n){return a.call(this,n,h)}

知道为什么我会收到此错误吗?我尝试将模板提取到 &lt;body&gt; like &lt;script type="text/template" id="temp"&gt; .... 并得到: Uncaught TypeError: undefined is not a function underscore.js:1304 h.template underscore.js:1304 (匿名函数)

希望你能帮帮我

解决方案

var studentInfo1 = _.template("<% _.each(students, function(item) { %>" + 
                      "<div class='studentRec " +
                      "<% (item.midterm_score + item.final_score) / 2 > 65 ? print('passingStudent') : print('failingStudent') %>'>" +
                      "<span style='font-weight:bold'>Name:</span> <span><%= item.lastname %>, <%= item.firstname %> </span>" +
                      "<span style='font-weight:bold'>School:</span> <span><%= item.school %></span></div>" +
                      "<% }); %>");


var result = studentInfo1(students);

appendTemplateData(result);

【问题讨论】:

  • 感谢@istos 的澄清

标签: javascript templates underscore.js underscore.js-templating


【解决方案1】:

请仔细查看_.template() 函数的文档。 http://underscorejs.org/#template

template 实用函数将模板字符串作为第一个参数,并返回一个函数,您可以使用该函数传入模板数据:

// `myTemplate` here is a function!
var myTemplate = _.template("<p><%= name %></p>");

// Now let's pass in the data for the template.
myTemplate({name: 'Joe Doe'}); // it returns: "<p>Joe Doe</p>"

【讨论】:

  • 谢谢,我仍然不知道为什么它工作正常(在视频中),但我听从了你的建议,它工作正常
  • @Mustafa:检查我对重复问题的回答,看看发生了什么。看起来您的教程适用于比您正在使用的版本更早的 Underscore 版本。
  • 你是对的,这就是@VuongNQ 能够运行它的原因。因为他使用的是 1.4 版本(正如他在下面的答案中链接到的那样。
【解决方案2】:

我试过你的代码,运行良好

我的建议是用这个下划线库替换你的 underscore.js

https://github.com/thomasdavis/backbonetutorials/blob/gh-pages/examples/modular-backbone/js/libs/underscore/underscore-min.js

我遇到了像你这样的问题,underscorejs.org 上的库无法工作

希望图书馆能帮您解决问题

【讨论】:

  • 感谢您的建议
猜你喜欢
  • 2012-08-10
  • 1970-01-01
  • 2022-11-14
  • 2021-04-24
  • 2023-01-23
  • 1970-01-01
  • 2012-05-11
  • 2020-02-24
  • 1970-01-01
相关资源
最近更新 更多