Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.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
即使使用delegateEvents()重新呈现后也不会触发backbone.js事件_Backbone.js_Backbone Events_Backbone Views - Fatal编程技术网

即使使用delegateEvents()重新呈现后也不会触发backbone.js事件

即使使用delegateEvents()重新呈现后也不会触发backbone.js事件,backbone.js,backbone-events,backbone-views,Backbone.js,Backbone Events,Backbone Views,我有一个包含嵌套视图的视图,当渲染时,视图上有一个链接,并附加了一个单击事件。我第一次点击al-link,一切正常。但当重新渲染所有视图时,链接事件将消失。我尝试在渲染中强制delegateEvents,并在重新渲染之前删除视图,但什么都没有 这是我的密码: var SlideView = Backbone.View.extend({ tagName: 'li', events: { 'click .nested':'destroy' }, te

我有一个包含嵌套视图的视图,当渲染时,视图上有一个链接,并附加了一个单击事件。我第一次点击al-link,一切正常。但当重新渲染所有视图时,链接事件将消失。我尝试在渲染中强制delegateEvents,并在重新渲染之前删除视图,但什么都没有

这是我的密码:

var SlideView = Backbone.View.extend({

    tagName: 'li',

    events: {
      'click .nested':'destroy'
    },

    template: _.template($('#slides-nested-template').html()),

    render: function(e){
      var _el = $(this.el);
      _el.html(this.template(this.model.toJSON()));
      this.delegateEvents(this.events);
      return this;
    },

    destroy: function(e){
      e.preventDefault();
      Presentations.eliminate($(e.target).attr('rel'));
    }

});

var SectionView = Backbone.View.extend({

    tagName: 'li',

    template: _.template($('#slides-template').html()),

    events: {
      'click .no-nested':'destroy'
    },

    initialize: function(options){
      this.views = [];
      _.bindAll(this, 'destroy');
    },

    render: function(){
      var _el = $(this.el), self=this;
      _el.html(this.template(this.model.toJSON()));
      _ul = this.$('ul');  

      var data = Presentations.filter(function(slide){
        return slide.get('padre') == self.model.get('id');
      });

      _.each(data, function(slide){
        view = new SlideView({
          model: slide
        });
        self.views.push(view);
        _ul.append(view.render().el);
      });

      this.delegateEvents(this.events);
      return this;
   },

   destroy: function(e){
     e.preventDefault();
     Presentations.eliminate($(e.target).attr('rel'));
   },

   removeViews: function(){
     while (this.views.length){
       var view = this.views.shift();
       view.undelegateEvents();
       view.remove();
       view = null;
    }
  }
});

var SectionList = Backbone.View.extend({

    tagName: 'ul',

    className: 'sortable',

    initialize: function(options){
      Presentations.on('add', this.render, this);
      Presentations.on('reset', this.render, this);
      Presentations.on('remove', this.render, this);
      this.views = [];
    },

    render: function(e){
      //this.removeViews();
      $('#slides .content').empty();

      var data = Presentations.filter(function(slide){
        return slide.get('padre') === false;
      });

      var view, self=this, _el=$(this.el);
      _.each(data, function(slide){
          view = new SectionView({
            model: slide
          });
          _el.append(view.render().el);
          self.views.push(view);
      });

      $('#slides .content').append(_el);
      return this;
   },

   removeViews: function(){
      while (this.views.length){
        var view = this.views.shift();
        view.undelegateEvents();
        view.removeViews();
        view.remove();
        view = null;
      }
   }
});

var Presentation = Backbone.Model.extend({

});

var PresentationList = Backbone.Collection.extend({

  model: Presentation,

  url: BASE_URL+'api/slides/'+PRESENTATION,

  eliminate: function(id){
    this.each(function(slide){
      if (slide.get('padre')==id){
        slide.set('padre', false);
        slide.save();
      }
    });
    var ref = this.get(id);
    ref.destroy();
    this.remove(ref);
  }
});

Presentations = new PresentationList();
SectionListView = new SectionList();
Presentations.fetch();
是我的错。幸亏我发现了错误。在渲染视图之前,我没有清空$this.el,然后我复制了视图中的所有节点: