2012-06-15 18 views
7

Alt görünümü yükleyen omurga görünümü var. Bir alt görünüm yüklediğimde, görünüm oluşturulduğunda görüntüye ihtiyaç duyulduğunda ve yükleyiciyi gizlediğinde, bir yükleyiciyi göstermek istiyorum. çünkü öyleOmurga görünümü, başlat ve oluştur

var mySubView = Backbone.View.extend({ 
    initialize: function() { 
     this.myCollection.fetch({ 
      async: false 
     }); 
    }, 

    render: function() { 
     // Code to render 
    } 
}); 

Benim alt görünümü eşzamanlı toplama yük: Şimdilik, benim alt görünüş bir koleksiyon yüklemek ve bunun gibi uygulanmaktadır

var appView = Backbone.View.extend({ 
    showLoader: function() { 
     // Code to show loader 
    }, 

    hideLoader: function() { 
     // Code to hide loader 
     }, 

    loadSubView: function() { 
     this.showLoader(); 
     var myView = new MySubView(); 
     this.$el.html(myView.render().el); 
     this.hideLoader(); 
    } 
}); 

:

böyle bir şey yaptılar Görüşümün ne zaman "hazır" olduğunu bildiğim tek yolu buldum ama bence bu Omurga'yı kullanmanın en iyi yolu değil.

Ne yapmalıyım?

+0

Hata yok, async programlama hakkında biraz daha okumalı/öğrenmelisiniz. Bu bir omurga sorusu değil, ustalaşması gereken bir programlama konseptidir. –

+0

Senkronize veya senkronize olmayan ne anlama geldiğini biliyorum. Sorumu tekrar sorabilirsem: Ebeveyn görüşümün başarılı olduğunu bildirmenin en iyi yolu nedir? – Mickael

cevap

15

Bunu yapmanın birkaç yolu vardır.

  1. Pubsub desenini açıkça kullanabilirsiniz. Böyle bir şey: Sen kendine değer değiştirici üzerinde ajaxStart/ajaxStop olaylara bir işlev ekleyebilirsiniz

    var AppView = Backbone.View.extend({ 
        showLoader: function() { 
         console.log('show the spinner'); 
        }, 
    
        hideLoader: function() { 
         console.log('hide the spinner'); 
        }, 
    
        loadSubView: function() { 
         this.showLoader(); 
         var subView = new SubView(); 
         subView.on('render', this.hideLoader); 
         this.$el.html(subView.render().el); 
    
        } 
    }); 
    
    var SubView = Backbone.View.extend({  
        render: function() { 
         console.log('a subView render'); 
         this.trigger('render'); 
         return this; 
        } 
    }); 
    
    var appView = new AppView({el: $('body')}); 
    appView.loadSubView(); 
    

    http://jsfiddle.net/theotheo/qnVhy/

  2. :

    var AppView = Backbone.View.extend({ 
        initialize: function() { 
         var _this = this; 
         this.$('#spinner') 
          .hide() 
          .ajaxStart(_this.showLoader) 
          .ajaxStop(_this.hideLoader); 
        } 
        ... 
    } 
    
  3. Yoksa jQuery.ajaxSetup kullanabilirsiniz:

    var AppView = Backbone.View.extend({ 
         initialize: function() { 
          var _this = this; 
          jQuery.ajaxSetup({ 
           beforeSend: _this.showLoader, 
           complete: _this.hideLoader, 
           success: function() {} 
          }); 
         } 
        ... 
        } 
    
İlgili konular