如何将事件绑定到主干中的基本变量?

时间:2016-03-23 04:14:03

标签: javascript backbone.js

我是Backbone的新手。这是我的问题。我有一个歌曲列表的集合和该列表中当前播放歌曲的索引。代码如下:

var songCollection = Backbone.Collection.extend({
    initialize: function(){
        ...
        this.index = 0;
        ...
    },
    ...
    getNextSong:function(){
        ...
        this.index++;
        ...
    }

})

并且有一个视图显示当前播放歌曲的内容。我想在当前播放歌曲改变时更新视图信息。下面的代码在视图中不起作用。

var view = Backbone.View.extend({
    initialize:function(options){
         this.options.on('change:index', this.render, this);

    }
)}

也不是

this.listenTo(...);

有人能说出解决方法吗?

1 个答案:

答案 0 :(得分:0)

  

“更改:[属性]”(模型,值,选项) - 更新特定属性时 - Events-catalog

更改事件是针对模型attributes哈希内部的更改触发的,据我所知,更改集合的随机属性不会触发任何事件。

你最好在模型的属性中有一个类似isPlaying的标志,然后从视图中收听它对集合的更改。

var songModel = Backbone.Model.extend({
  defaults: {
    isPlaying: false
  }
});
var songCollection = Backbone.Collection.extend({
  model: songModel
});

var view = Backbone.View.extend({
  initialize: function(options) {
    this.listenTo(this.collection, 'change:isPlaying', this.render);
  },
  render: function(model, value, options) {
   if(value){
    //---------------^ this is the playing song, render it
   }
  }
});