Javascript - Backbone - 代码抛出错误

时间:2012-07-04 13:34:34

标签: javascript jquery backbone.js mustache

下面的代码在它的代码部分的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>

3 个答案:

答案 0 :(得分:1)

您的问题是data.employees中有一个迷路尾随逗号:

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

所有其他JavaScript解析器(错误地)忽略尾随逗号,但IE(至少是较旧的)将null放入您的数组,以便他们看到data

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

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

删除那个尾随逗号,一切都应该正常。

答案 1 :(得分:0)

您忘记将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。

希望这有帮助!

答案 2 :(得分:0)

我已经修好了,有三个问题。

1)逗号问题,“mu太短”的问题是正确的 也确定了。

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

3)当我使用时,最新版本的小胡子给了我错误 较旧的它工作得很好。