12

我正在尝试使用以下代码创建一个简单的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 检查中使用一个函数,但得到 [object Object]

在这条线上 - new BodyView();

如果我使用旧版本的主干.js(0.3.3),则此代码有效

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

PS - 我主要关注http://backbonetutorials.com/what-is-a-view/http://documentcloud.github.com/backbone/#View来创建这个示例主干 js 应用程序。

4

2 回答 2

19

您应该检查的基本事项:

像这样包装你new BodyView()的 jQuery.ready :

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

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

在下划线和主干之前加载 jQuery

您的 jquery 脚本行应该在 Backbone 之前。

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

于 2012-05-02T10:29:04.753 回答
6

为我工作。尝试将所有 Backbone 代码包装在一个documentReady块中:

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

另一件事是,也许您必须更改脚本加载的顺序:

  1. 下划线
  2. jQuery
  3. 骨干
于 2012-05-02T10:27:51.447 回答