导入Backbone.js时出错

时间:2013-03-06 07:46:54

标签: backbone.js backbone-views

我刚刚开始在线学习骨干ebook

但是由于我真的不理解导入错误,我一直坚持ToDo App创建......

我从Backbone Official Website

下载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 正在引用this backbone view,以下是此视图的代码摘录:

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功能的问题。

3 个答案:

答案 0 :(得分:3)

您必须在骨干之前加入underscore.js

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

http://backbonejs.org/说:

  

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

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

答案 1 :(得分: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>

干杯

答案 2 :(得分:1)

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

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