创建backbone.js视图时出错 - 在instanceof检查中期望一个函数,但得到[object Object]

时间:2012-05-02 10:15:28

标签: jquery backbone.js backbone-views

我正在尝试使用以下代码创建一个简单的backbone.js视图:

<!DOCTYPE HTML>
<html>
    <head>
        <script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.3.1/underscore-min.js"></script>
        <script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/backbone.js/0.9.2/backbone-min.js"></script>
        <!--<script type="text/javascript" src="http://ajax.cdnjs.com/ajax/libs/backbone.js/0.3.3/backbone-min.js"></script> -->
        <script type="text/javascript" src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
    </head>
    <body>
        <script type="text/javascript">
            var BodyView = Backbone.View.extend({
                el:$('body'),
                initialize : function() {
                    console.log("view init");
                }
            });

            new BodyView();
        </script>
    </body>
</html>

但是

  

我收到错误在instanceof check中期待一个函数,但是   得到[对象]

就在这一行 - new BodyView();

如果我使用较旧版本的backbone.js(0.3.3)

,此代码正常工作

知道为什么会发生这种错误以及如何解决它?。提前谢谢。

P.S - 我一直主要关注http://backbonetutorials.com/what-is-a-view/http://documentcloud.github.com/backbone/#View来创建这个示例骨干js app。

2 个答案:

答案 0 :(得分:19)

您应该查看的基本内容:

将您的new BodyView()包装在jQuery.ready中,如下所示:

 var BodyView = Backbone.View.extend({
     el:$('body'),
     initialize : function() {
         console.log("view init");
     }
 });

 $(function() {
        new BodyView();
 });

在Underscore和Backbone之前加载jQuery

您的jquery脚本行应该早于Backbone。

您的代码确实有效:http://jsfiddle.net/vTuPJ/

答案 1 :(得分:6)

适合我。尝试将所有Backbone代码包装在documentReady块中:

$(function(){
  // .. your backbone code
});​

另一件事是,您可能需要更改脚本加载的顺序:

  1. 下划线
  2. jquery的
  3. 主链