Backbone.Model未定义。

3

看起来其他人在尝试创建Backbone View时遇到了类似的问题。但我认为我的问题不同。以下是我如何在页面中包含Backbone。

<script type="text/javascript" src="/js/jquery.min.js"></script>
<script type="text/javascript">
    //<!--
    jQuery.noConflict ();
    //-->
</script>
<!--[if lt IE 9]><script type="text/javascript" src="/js/html5.js"></script><![endif]-->
<script type="text/javascript" src="/js/backbone-min.js"></script>
<script type="text/javascript" src="/js/showbase.js"></script>

我在调用jQuery.noConflict()函数,因为我认为这可能是问题所在。但事实并非如此。
这是我showbase.js文件中的内容。这个简单的测试失败了。
jQuery (document).ready (
            function ()
            {
                var props = '';
                for (var p in Backbone)
                    props += p + ': ' + typeof Backbone [p] + "\n";
                alert (props);

                props = '';
                for (var p in Backbone.Model)
                    props += p + ': ' + typeof Backbone.Model [p] + "\n";
                alert (props);

                alert (typeof Backbone.Model);
            }
);

在第一个警告中,我得到:
VERSION: string
$: function
noConflict: function
emulateHTTP: boolean
emulateJSON: boolean
Events: object

在第二个警告中,我根本就没有得到任何东西。
在第三个警告中,我得到了“未定义”。
Firebug给出的错误消息是“TypeError:h未定义”,并且它指向backbone-min.js文件的某个深处。
我正在按照http://backbonejs.org/docs/todos.html中的Todos示例进行操作。 在该示例中,他们的第一件事是在jQuery文档准备好函数中扩展Backbone.Model类。 这就是我所做的一切。 但是,在那一点上,Backbone.Model类甚至不存在。
我没有尝试访问this.Model。 我从来没有达到过一个我可以访问this的代码点。 Model类仅在Backbone对象中未定义。 我需要包含除backbone-min.js文件以外的其他内容吗?

1
我没有看到下划线,这是打错字了吗? - Loamhoof
啊,原来还有一个文件我需要包含。那就是问题所在了。我对Backbone还很陌生,不知道它依赖于underscore.js。非常感谢! - user2455811
2
Backbone的唯一硬依赖是Underscore.js(>= 1.4.3)。为了实现RESTful持久性,通过Backbone.Router支持历史记录和通过Backbone.View进行DOM操作,需要包括json2.js以及jQuery(>= 1.7.0)或Zepto。 - mu is too short
Loamhoof是正确的。问题在于没有包含underscore.js。在问题发布后8小时内,该网站不允许我发布实际答案。 - user2455811
我收到了相同的错误,结果发现我必须按正确的顺序放置它们(先是Underscore,然后是Backbone)。JQuery > Underscore > Backbone - Mike R
1个回答

7
问题在于未包含underscore.js。正如Loamhoof所指出的,backbone.js需要它。
我进行了进一步的研究。根据这个页面,backbone只依赖于json2.js,以提供JSON.parse和JSON.stringify函数,这些函数现在已成为大多数浏览器中普通的javascript功能。因此根据那个页面上的评论,json2.js应该只需要支持不提供JSON功能的旧浏览器。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接