繁体   English   中英

Javascript-主干-代码抛出错误

[英]Javascript - Backbone - Code throwing error

下面的代码引发错误-mustache.js中此代码部分的错误“ Microsoft JScript运行时错误:对象不支持此属性或方法。”

function quote(text) {
    var escaped = text.replace(jsCharsRe, function (c) {
      return "\\u" + ('0000' + c.charCodeAt(0).toString(16)).slice(-4);
    });"

这是我的代码

<%@  Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="VSBackboneDemo._Default" %>
<html>
<head>
    <title>VS backbone demo</title>
    <script src="Scripts/jquery.min.js" type="text/javascript"></script>
    <script src="Scripts/underscore-min.js" type="text/javascript"></script>
    <script src="Scripts/backbone-min.js" type="text/javascript"></script>
    <script src="http://github.com/janl/mustache.js/raw/master/mustache.js"></script>
    <script type="text/javascript">


        EmployeeDataView = Backbone.View.extend({
            initialize: function () {

                this.render();
            },
            render: function () {

                var data = {
                    employees: [
                { firstName: "Mickey",
                    lastName: "Mouse",
                    employeeID: 10000,
                    jobTitle: "Software Developer"
                },
                { firstName: "Donald",
                    lastName: "Duck",
                    employeeID: 20000,
                    jobTitle: "Software Engineer"
                },
                { firstName: "Bugs",
                    lastName: "Bunny",
                    employeeID: 30000,
                    jobTitle: "UI tester"
                },
                ]
                };

                var tpl = "Employees:<ul>{{#employees}}<li>{{firstName}} {{lastName}}" +
                    "{{employeeID}}{{jobTitle}}</li>{{/employees}}</ul>";

                var html = Mustache.to_html(tpl, data);

                $('#EmployeeDataContainer').html(html);


            }

        });


        var EmployeeDataView = new EmployeeDataView({ el: $("#EmployeeDataContainer") });

    </script>
</head>
<body>
    <div id="EmployeeDataContainer">
    </div>
</body>
</html>

您的问题是data.employees有一个逗号结尾的逗号:

var data = {
    employees: [
        // ...
        { firstName: "Bugs",
          lastName: "Bunny",
          employeeID: 30000,
          jobTitle: "UI tester"
        }, // <------------------------- Right here
    ]
};

所有其他JavaScript解析器(错误地)都忽略了结尾的逗号,但IE(至少是较旧的IE)将null插入了数组,因此它们看到的data如下:

var data = {
    employees: [
        // ...
        { firstName: "Bugs",
          lastName: "Bunny",
          employeeID: 30000,
          jobTitle: "UI tester"
        },
        null
    ]
};

然后,您的Mustache模板中的{{#employees}}最终尝试使用null ,一切都崩溃了。

删除该结尾的逗号,然后一切正常。

您忘记在此行添加type="text/javascript"

<script src="http://github.com/janl/mustache.js/raw/master/mustache.js"></script>

因此,将其更改为:

<script type="text/javascript" src="http://github.com/janl/mustache.js/raw/master/mustache.js"></script>

这里发生的是您的浏览器将mustache.js文件解释为Microfosft JScript,而不是Javascript。

希望这会有所帮助!

好吧,我已经修复了它,这有三个问题。

1)逗号问题,“ mu太短”的问题也可以正确识别。

2)您必须将整个脚本包装在$(function() { .......... });周围$(function() { .......... }); 否则它将无法正确显示。

3)最新版本的小胡子给了我错误,当我使用旧的胡须时,它可以正常工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM