javascript - 下划线模板错误: function (n){return a.调用(this,n,h)}

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

我正在关注有关 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>

结果:

函数(n){返回a.call(this,n,h)}

知道为什么我会收到此错误吗?我尝试将模板提取到 <body> like <script type="text/template" id="temp"> ....我得到了: 未捕获的类型错误:未定义不是函数 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);

最佳答案

请仔细查看_.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>"

关于javascript - 下划线模板错误: function (n){return a.调用(this,n,h)},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26560838/

相关文章:

javascript - 为什么 parentNode 会替换 td 的所有元素而不是指定的元素?

c++ - 无法推导 std::function 模板参数

c++ - 为什么我必须通过this指针访问模板基类成员?

c++ - friend 方法的参数列表中的不同模板特化

javascript - 在 Underscore 模板中获取 Backbone 集合的前 3 项

javascript - UnderscoreJS _.every 为空

javascript - 如何避免使用 2 个条件对 JavaScript 数组进行两次排序

javascript - 如何使用超时重置循环参数

javascript - PhpStorm 中 JavaScript 的第一行中断

javascript/jquery : problem calling a function inside an object (function undefined)