Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 停止侦听()竞争条件?_Javascript_Jquery_Backbone.js - Fatal编程技术网

Javascript 停止侦听()竞争条件?

Javascript 停止侦听()竞争条件?,javascript,jquery,backbone.js,Javascript,Jquery,Backbone.js,这是我的主干视图的一个片段,我不明白为什么有时同一个songView会被渲染两次。在其他视图中,我调用playliView.initialize手动初始化,而不重新创建视图。因此,我在初始化开始时取消了所有事件的注册,以防止它多次侦听同一事件。它完成了它的工作,但偶尔会渲染两次相同的songView。我怀疑这可能是某种比赛条件,但我还没有弄清楚原因。有人有什么想法吗?如果playlimodel.get'songs'没有返回相同的对象,则可能会发生这种情况,请尝试仅删除事件,不管对象是什么,如下所

这是我的主干视图的一个片段,我不明白为什么有时同一个songView会被渲染两次。在其他视图中,我调用playliView.initialize手动初始化,而不重新创建视图。因此,我在初始化开始时取消了所有事件的注册,以防止它多次侦听同一事件。它完成了它的工作,但偶尔会渲染两次相同的songView。我怀疑这可能是某种比赛条件,但我还没有弄清楚原因。有人有什么想法吗?

如果playlimodel.get'songs'没有返回相同的对象,则可能会发生这种情况,请尝试仅删除事件,不管对象是什么,如下所示:

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);
    });
PlayModel.get'songs'是否总是返回相同的对象引用?在任何情况下,如果对您有效的话,在没有任何参数的情况下使用stopListening可能会更安全。我这样做的时候也是一样。在没有任何参数的情况下停止侦听。
this.stopListening(null, 'add');