Mat*_*ieu 2 javascript html5-audio backbone.js
我不明白为什么click事件发生了好但不是那个timeupdate.
没有事件发生<audio>,我尝试使用canplay,播放,暂停,timeupdate,...如果我在模板中显示控件,click .audio如果我点击播放器,事件将会触发.
var PlayerView = Backbone.View.extend({
tagName : 'div',
template: _.template($('#player-template').html()),
initialize: function() {
this.$el.html(this.template(this.model.toJSON()));
}
events: {
'timeupdate .audio': 'onTimeUpdate',
'click .btn_play': 'onClickPlay',
'click .btn_pause': 'onClickPause'
},
onTimeUpdate: function () {
console.log('player ' + this.model.get('id') + ' : event = onTimeUpdate');
},
onClickPlay: function () {
console.log('player ' + this.model.get('id') + ' : event = onClickPlay');
},
onClickPause: function () {
console.log('player ' + this.model.get('id') + ' : event = onClickPause');
},
});
$(function(){
var model = new PlayerModel({'id' : 1});
var view = new PlayerView({'model' : model});
$("#players").append(view.el);
})
Run Code Online (Sandbox Code Playgroud)
模板:
<script type="text/template" id="player-template">
<div id="player<%= id %>" class="player">
<audio class="audio">
<source src="<%= track_url %>" type="audio/mp3" />
</audio>
<div class="control">
<button class="btn_play">Play</button>
<button class="btn_pause">Pause</button>
</div>
</div>
</script>
Run Code Online (Sandbox Code Playgroud)
nik*_*shr 11
Backbone在内部转换事件对象并通过委托绑定事件.这意味着
events: {
'timeupdate .audio': 'onTimeUpdate',
'click .btn_play': 'onClickPlay'
}
Run Code Online (Sandbox Code Playgroud)
结束为
this.$el.delegate('.audio','timeupdate', this.onTimeUpdate);
this.$el.delegate('.btn_play','click', this.onClickPlay);
Run Code Online (Sandbox Code Playgroud)
但有一个问题:
使用事件委托来提高效率.[...]这仅适用于可委托事件:不在Internet Explorer中进行聚焦,模糊,也不能更改,提交和重置.
并且看起来音频事件不是委托能的.
但是,直接设置回调确实有效,例如,您可以替换初始化函数
initialize: function() {
this.$el.html(this.template(this.model.toJSON()));
_.bindAll(this,'onTimeUpdate');
this.$('.audio').on('timeupdate', this.onTimeUpdate);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1780 次 |
| 最近记录: |