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

How to bind an event to a basic variable in backbone?

本文关键字:变量 事件 绑定      更新时间:2023-09-26

我是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(...);

有人能告诉我们解决这个问题的方法吗?

"change:[attribute]"(型号、值、选项)-当特定属性更新时-事件目录

模型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
   }
  }
});