Backbone.js 为什么<;HTMLAudioElement>;没有方法';设置';

Backbone.js 为什么<;HTMLAudioElement>;没有方法';设置';,backbone.js,dom-events,html5-audio,Backbone.js,Dom Events,Html5 Audio,下面是我的代码,当我运行它时,它显示错误-没有方法“set”。 为什么会这样?我已将函数绑定到模型,但它似乎工作错误: var Player = Backbone.Model.extend({ initialize: function(){ _.bind(this.ontimeupdate, this); _.bind(this.onprogress, this); }, setAudio: function(

下面是我的代码,当我运行它时,它显示错误-
没有方法“set”。 为什么会这样?我已将函数绑定到模型,但它似乎工作错误:

var Player = Backbone.Model.extend({
    initialize: function(){         
        _.bind(this.ontimeupdate, this);
        _.bind(this.onprogress, this);
    },      
    setAudio: function(ogglink, mp3link, ontimeupdate){
        var el = document.createElement("audio");           
        el.addEventListener('timeupdate', this.ontimeupdate);
        this.audiotag = el;
    },      
    ontimeupdate: function() {
        this.set("curtime", this.currentTime);
    }
});

bindAll
(在进行多个绑定时应使用该方法)不同,仅使用
bind
(相当于ECMA的
bind
方法)。所以


如果您要将这些方法绑定到
(您的播放器实例),那么您的
ontimeupdate
方法可能更像这样:

ontimeupdate: function() {
    this.set("curtime", this.audiotag.currentTime);
}

这样可以消除错误,但玩家现在做错了。当我点击play时,歌曲开始播放的时间只有3次我在询问之前就尝试过这种方式,问题是“this”不是播放器实例,它是播放器变量“audiotag”的内容。你需要实际将该实例绑定到@Loamhoof所说的方法:
.bindAll(this,'ontimeupdate','onprogress')
。那就行了。
_.bindAll(this);
_.bindAll(this, 'ontimeupdate', 'onprogress');
ontimeupdate: function() {
    this.set("curtime", this.audiotag.currentTime);
}