var PlaylistView = Backbone.View.extend({
el: '#expanded-container',
initialize: function() {
var playlistModel = this.model;
this.stopListening(playlistModel.get('songs'), 'add');
var form = this.$('input');
$(form).keypress(function (e) {
if (e.charCode == 13) {
console.log("hey")
var query = form.val();
playlistModel.lookUpAndAddSingleSong(query);
}
});
this.listenTo(playlistModel.get('songs'), 'add', function (song) {
var songView = new SongView({ model: song });
this.$('.playlist-songs').prepend(songView.render().el);
});
这是我的Backbone视图的片段,我无法弄清楚为什么有时相同的songView
呈现两次。在其他视图中,我手动调用PlaylistView.initialize()
而不重新创建视图。因此,我在初始化开始时取消注册所有事件,以防止它多次侦听同一事件。它完成了它的工作但只是偶尔一次,同一个songView被渲染两次。我怀疑这可能是某种竞争条件,但我无法弄清楚原因。有没有人有想法?
答案 0 :(得分:0)
如果playlistModel.get('songs')
没有返回相同的对象,可能会发生这种情况,尝试只删除对象所在的事件,如下所示:
this.stopListening(null, 'add');