Javascript Backbone.js集合不';t侦听模型更改事件

Javascript Backbone.js集合不';t侦听模型更改事件,javascript,backbone.js,javascript-events,Javascript,Backbone.js,Javascript Events,我刚刚开始使用backbone.js创建spa。我试着让一本藏书听模型的改变,但什么也没发生。这是模型和集合: var Book = Backbone.Model.extend({ idAttribute: 'id', defaults: { id: null, title: '', author: '', completed: false } }); var BooksCollection = Backbone.Collection.exte

我刚刚开始使用backbone.js创建spa。我试着让一本藏书听模型的改变,但什么也没发生。这是模型和集合:

var Book = Backbone.Model.extend({

  idAttribute: 'id',

  defaults: {
    id: null,
    title: '',
    author: '',
    completed: false
  }

});

var BooksCollection = Backbone.Collection.extend({

  model: Book,

  url: 'books',

  initialize: function() {
    this.listenTo(this.model, 'change', this.debug);
  },

  debug: function () {
    console.log('something happened !!!');
  }

});
这是一种观点:

var BookView = Backbone.View.extend({

    template: _.template($('#viewBook').html()),

    events: {
        "click #save": "bookSave"
    },

    initialize: function() {
        this.listenTo(this.model, 'change', this.render);
    },

    render: function() {
        $(this.el).html(this.template(this.model.toJSON()));
        return this;
    },

    bookSave: function() {
        this.model.set({author: "nobody"});
    }

});

当我点击#save(保存)按钮时,作者已更改,但没有任何记录。我错在哪里?谢谢。

模型中的事件会自动冒泡到集合中,因此您可以像下面这样直接收听模型更改:

// in the collection
initialize: function() {
    this.listenTo(this, 'change', this.debug);
},

它使用save()向服务器发送请求。我只想更改集合模型属性值。集合不能侦听属性更改吗?它们只能侦听同步事件吗?您确定视图和模型引用的是同一个模型吗?可以显式创建新模型并将其传递给视图。