Javascript 传递模型问题的变量

Javascript 传递模型问题的变量,javascript,jquery,backbone.js,Javascript,Jquery,Backbone.js,我有一个backbonejs应用程序,它的父视图如下: var LibraryView = Backbone.View.extend({ initialize: function(options) { if (options) { _.extend(this, options); } this.render(); alert(this.model); //Alerts Object Object like it's supp

我有一个backbonejs应用程序,它的父视图如下:

var LibraryView = Backbone.View.extend({
   initialize: function(options) {
      if (options) {
        _.extend(this, options);
      }
      this.render();

      alert(this.model); //Alerts Object Object like it's supposed to

      _.each(this.model.get("library").books, function(book){
          var bookView = new BookView({
              el: $('#books'),
              book: book,
              model: this.model
          });
          bookView.render();
      });
   }
});
我的bookView看起来像:

var BookView = Backbone.View.extend({
    initialize: function(options) {
       if (options) {
          _.extend(this, options);
       }
       alert(this.model); // Alerts undefined
    }
});
基本上,我正在尝试将this.model从LibraryView传递到BookView,但当我这样做时,BookView的
警报(this.model)
警报未定义


我应该提到的是,当我在BookView上查看alert(this.book)时,它并不是未定义的。

这是因为
已在u.each中更改了上下文。关于它的帖子有上百万篇,所以我不会解释。 以这样的方式结束(使用this)以保持上下文:

   _.each(this.model.get("library").books, function(book){
          var bookView = new BookView({
              el: $('#books'),
              book: book,
              model: this.model
          }, this);
还可以查看下划线的u.bindAll

您的问题与
的定义方式有关。
在函数体中的含义由调用父函数的方式控制。幸运的是,
\每个
都允许您在上下文中作为可选的第三个参数传递(上下文在函数体中等同于此)。此处的文档:

不幸的是,这只为第一个函数绑定了this的值,这是您传递到
的匿名函数。调用
BookView
构造函数时,这不会绑定
This
,因为它是一个单独的函数。当你调用一个函数时,它会创建一个单独的作用域,这意味着一个不同的值。一种解决方案是为构造函数使用
bind

试试这个:

  _.each(this.model.get("library").books, function(book){
      var bookView = new BookView({
          el: $('#books'),
          book: book,
          model: this.model
      }).bind(this);
      bookView.render();
  }, this);

在这里可以找到关于
定义的不同方式以及如何使用
.bind
.bindAll
的进一步阅读:

如果
的上下文发生了变化,为什么我可以在我的bookView上执行
警报(this.book)
?我尝试了你的答案,但是传递
this
似乎无法解决问题?因为您正在将
book
传递给您的
BookView
,但将不起作用的
this.model
作为模型传递。在你的每一个<代码>此。模型
什么都不是
现在指的是您的each,each中没有
模型
对象,但有
对象。请搜索这个上下文并读懂它,它有点复杂,一旦你得到它,你就知道什么是错的。