2

我刚开始学习这本在线电子书的骨干。

但是由于我真的不明白的导入错误,我坚持创建 ToDo 应用程序......

我从Backbone官网下载Backbone.js和backbone-min.js

在我的 index.html 中,我尝试导入 Backbone 或 Backbone-min.js 并在 Firebug 控制台中得到以下结果:

导入 Backbone.js

<script src="js/lib/zepto.min.js"></script>
<script src="js/lib/underscore.js"></script>
<script src="js/lib/backbone.js"></script>

TypeError: this.$el.off is not a function
backbone.js line 1325 : this.$el.off('.delegateEvents' + this.cid);

导入 Backbone-min.js

<script src="js/lib/zepto.min.js"></script>
<script src="js/lib/underscore.js"></script>
<script src="js/lib/backbone-min.js"></script>

TypeError: this.listenTo is not a function
app.js line 34 : this.listenTo(app.Todos, 'add', this.addOne);

app.js指的是这个主干视图,这里是这个视图的代码摘录:

initialize: function() {
  this.allCheckbox = this.$('#toggle-all')[0];
  this.$input = this.$('#new-todo');
  this.$footer = this.$('#footer');
  this.$main = this.$('#main');

  this.listenTo(app.Todos, 'add', this.addOne);
  this.listenTo(app.Todos, 'reset', this.addAll);
  this.listenTo(app.Todos, 'change:completed', this.filterOne);
  this.listenTo(app.Todos,'filter', this.filterAll);
  this.listenTo(app.Todos, 'all', this.render);

  app.Todos.fetch();
},

如果您已经遇到过此类问题...我不得不承认我真的不明白为什么在尝试导入主干时会出错,而且我还不够熟练,无法理解 ListenTo 功能的问题...

4

3 回答 3

3

您必须在主干之前包含underscore.js :

<script src="underscore-min.js"></script>
<script src="backbone-min.js"></script>

http://backbonejs.org/说:

Backbone 唯一的硬依赖是 Underscore.js (>= 1.4.3) 或 Lo-Dash。对于 RESTful 持久性,通过 Backbone.Router 支持历史记录和使用 Backbone.View 进行 DOM 操作,包括 json2.js,以及 jQuery (>= 1.7.0) 或 Zepto。

此外,如果您想在代码中使用jQuery选择器 ( $),也请包含 jQuery。

于 2013-03-06T07:52:59.107 回答
2

我从 github 下载的一个项目遇到了同样的问题。我从以下位置获得了最新的脚本,现在运行良好。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.1/jquery.min.js"></script>
<script src="http://documentcloud.github.com/underscore/underscore-min.js"></script>
<script src="http://documentcloud.github.io/backbone/backbone-min.js"></script>

干杯

于 2013-06-02T11:55:45.813 回答
1

1) this.listenTo 已添加到最新版本的 Backbone 中,因此您使用的 Backbone 库可能已过时。尝试使用最新版本的 Backbone。2) this.$el : 你应该使用 jQuery。如果在添加 jQuery 之后再次出现此错误,则将 console.log(this.$el) 放在此行之上..如果它正在获取一个元素,它将打印否则 [] 或未定义。

根据官方文档,Backbone 唯一的硬依赖是 Underscore 或 Lo-Dash。但是你应该使用RequireJS来设置js文件下载的顺序。

于 2013-03-06T19:54:46.907 回答