2016-03-24 8 views
0

Omurga uygulamasında, görüntülenecek veri bulunmadığını ve bazı veriler oluşturmak için bir düğmeyi tıklattığını açıklayan bir görünümü var.Omurgada görünümü değiştirme: En Fazla Arama Yığını Excedeed

Bazı veriler oluşturmak sunucuma bir POST isteği gönderir ve bir koleksiyona model a ekler, koleksiyonda bir dinleyici vardır. Bu daha sonra bir yöntemi patlar olduğunu görebilirsiniz Yukarıdan

this.listenTo(this.collection, "add", this.addOneClient); 

,

addOneClient: function(model) { 

    if(this.collection.length == 1) { 
     this.$el.empty(); 
     this.render(); 
    } 

    var clientEntry = new Pops.Views.ClientListEntry({ 
     model : model, 
     user : this.options.user 
    }); 

    this.$('.client-list-table').append(clientEntry.render().el); 
}, 

Yani temelde bir ebeveyn görünümüne bir görünüm eklemeniz ancak model bir koleksiyon olarak üzerinde tek kontrol eder, eğer eğer öyleyse, biz, wH, Aslen Maximimum çağrı yığını hale yönteminde aşılması ediliyordu

render: function() { 

     if(this.model.get('clients').length > 0) { 

      this.$el.html(this.template({ //Originally Maximum callstack was being exceeded here 
       organisation : this.model.toJSON(), 
       user: this.options.user.toJSON() 
      })); 

     } else { 

      var noView = new Pops.Views.NoView({ 
       text : "There are currently no clients, <a href='#' data-create='client'>click here</a> to create one." 
      }); 

      return this.$el.html(noView.render().el); 
     } 

     var filter = Pops.Session.get('organisation_filters').findWhere({ organisation_id : this.model.get('id') }); 
     var sorting = filter.get('list_sorting').split(","); 

     this.collection.sortByField(sorting[0], sorting[1]); 

     this.$('.js-sort-client-projects').removeClass('active'); 

     if(sorting[1] == "desc") { 
      this.$('.js-sort-client-projects[data-sort="' + sorting[0] + '"]').attr('data-order', 'asc'); 
      this.$('.js-sort-client-projects[data-sort="' + sorting[0] + '"]').removeClass('desc').addClass('asc active'); 
     } else { 
      this.$('.js-sort-client-projects[data-sort="' + sorting[0] + '"]').attr('data-order', 'desc'); 
      this.$('.js-sort-client-projects[data-sort="' + sorting[0] + '"]').removeClass('asc').addClass('desc active'); 
     } 

     this.addAll(); //Added this.$el.empty to addOne method, maximum callstack being exceeded here now. 
    }, 

hiçbir veri görünümünü kaldırmak ve ana görünümü vermek yöntemde oluşturulan ana görünümü oluşturmak gerekir Ben this.$el içine şablonu itmek tr, o zaman benim koduyla yanlış nedir hiçbir fikrim yok,

addAll: function() { 
     this.$('.client-list-table').find('tbody').empty(); 
     this.collection.each(this.addOneClient, this); 
    }, 

benim addOneMethod içinde. $ El bu boşaltmak ve ben addAll yöntemini çağırdığınızda çağrı yığını aşıldığında, herhangi biri ışık tutabilir mi?

cevap

1

Hmmm, burada sorun

addOneClient -> render -> addAll -> addOneClient 
+0

O Bir yanıt yaptığını düşünüyorum. – Udders