主干错误从何而来?



所以,我正在使用 Backbone 创建一个基本视图,当我去运行它时,我得到这个 TypeError:

Uncaught TypeError: Right-hand side of instanceof is not an object

该错误引用了程序中backbone.min.js文件和第 18 行中的多个点。这是代码:

<!DOCTYPE HTML>
<HTML>
<HEAD>
<META CHARSET="UTF-8" />
<TITLE>First View</TITLE>
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.3.3/underscore-min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.0.0/backbone-min.js"></script>
<SCRIPT LANGUAGE="Javascript">
var PokeView = Backbone.View.extend({
render: function() {
this.$el.html("Simisage");
return this;
}
});
var myPokeView = new PokeView({ el: "#paragraph" });
console.log(myPokeView instanceof Object);
myPokeView.render();
</SCRIPT>
</HEAD>
<BODY>
<p id="paragraph"></p>
</BODY>

我一直在互联网上寻找,有些人遇到了同样的错误,但它与 Backbone 无关。骨干的解决方案是否与其他解决方案相同?我该如何解决这个问题?

  1. 使用最新版本的 Backbone,目前是 1.3.3。
  2. 在开发过程中使用任何库的非缩小版本。甚至还有一个大的开发版本按钮来下载骨干源文件。
  3. 仔细阅读依赖项列表,对于 Backbone 的 1.0.0 版本,该列表是:

    Backbone 唯一的硬依赖关系是 Underscore.js (>= 1.4.3)。对于 RESTful 持久性,通过 Backbone.Router 的历史支持和 Backbone.View 的 DOM 操作包括 json2.js 和 jQuery (>= 1.7.0) 或 Zepto。

    对于 1.3.3 版:

    Backbone 唯一的硬依赖关系是 Underscore.js (>= 1.8.3)。对于 Backbone.View 的 RESTful 持久性和 DOM 操作,包括jQuery(>= 1.11.0) 和json2.js用于较旧的 Internet Explorer 支持。(模仿Underscore和jQuery API,如Lodash和Zepto,也将倾向于工作,具有不同程度的兼容性。

因此,在您共享的代码中,看起来缺少jQuery。只需将其包含在其他库之前,您就可以使用 Backbone 了。

另外,请注意,在执行该脚本片段时,您正在使用带有#paragraph元素的视图的el选项,该元素在文档中尚不存在。若要解决此问题,请将脚本标记放在正文底部。

<html>
<head>
<meta charset="UTF-8" />
<title>First View</title>
</head>
<body>
<p id="paragraph"></p>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.3.3/underscore.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.3.3/backbone.js"></script>
<script>
var PokeView = Backbone.View.extend({
render: function() {
this.$el.html("Simisage");
return this;
}
});
var myPokeView = new PokeView({ el: "#paragraph" });
console.log(myPokeView instanceof Object);
myPokeView.render();
</script>
</body>
</html>

最新更新