如果我将视图删除到单独的文件,Backbone将停止工作

时间:2014-02-23 17:46:03

标签: javascript jquery backbone.js

让我疯狂,看看这个jsfiddle - 这是我的问题的非常简化的版本,但它绝对是示范性的。像这样工作,但如果你删除AppView定义

var AppView = Backbone.View.extend({

  el: $("body"),

  initialize: function() {
      console.log('init');
      this.render();
  },

  render: function() {
      console.log('render');
      this.$el.html("123");
  }
});

来自“主”脚本(检查自己 - 相同的定义仍将包含在“外部资源”部分) - 它停止工作。我试图用console.log检查该定义是否仍然可以在全局命名空间中使用,当然也是。不知道。

更新

还有更多 - 它不只是可用 - 该死的事情正如我们可以通过console.log()在chrome dev控制台中工作,但this.$el.html("123");不会影响任何事情!

1 个答案:

答案 0 :(得分:1)

如果您检查小提琴中的右下方面板,则可以看到AppView.js文件包含在iframe中显示的生成文档的head中。 视图的定义是el元素设置为$('body')

el:$(“body”)

但是body Node不存在,但是:它是一个空的jQuery对象。

jQuery document ready回调中,AppView定义会按预期找到body元素。

我理解您需要在单独的javascript文件中移动View的定义。 您可以通过多种方式实现结果。最明显的是包含在body元素中导入它的script元素。更好的方法是在el定义的initialize方法中设置AppView,或者更好的是,您可以将元素传递给构造函数,正如Kenan在下面的评论中解释的那样