2013-06-12 16 views
7

Ben Backbone için yeni ve bunun için en iyi uygulamayı bilmek isterim - Bir çocuğun ebeveyn görünümü ile iletişim kurmak için kolay bir yol istiyorum Ebeveyn üzerinde bir yöntem.Omurga - çağrı/referans ana sayfa görünümünden görünüm

Rudimenter örneği "masaüstü" ve "belge" görünümleri kullanarak aşağıdaki:

class DesktopView extends Backbone.View{ 
    constructor(options?) { 
     super(options); 
     this.el = $('#desktop'); 
     this.createDocument(); 
    } 
    createDocument() { 
     dv = new DocumentView(); 
     $(this.el).append(dv.render()); 
    } 
} 

class DocumentView extends Backbone.View{ 
    constructor(options?) { 
     super(options);   
     this.tagName = 'div'; 
     this.className = 'document'; 
     this.events = { 
      "click": "clickHander" 
     }; 
    }; 
    render() { 
     return this.el; 
    } 

    clickHandler() { 
     //COMMUNICATE WITH THE DESKTOP VIEW 
    } 
} 

Ben belge görünümü için bir model oluşturmak mı ve bu değişiklikleri işler?

cevap

15

Sen Omurga olaylarını kullanabilirsiniz:

createDocument() { 
     that = this; 
     // give reference to parent view 
     dv = new DocumentView({desktopView : that}); 
     $(this.el).append(dv.render()); 
    } 

Sonra gibi çocuk görünümünde erişmek mümkün olmalıdır işlev çağrılarını tetiklemek için Bu, 'çocuk' görüşünün ebeveynlik hakkında bilmek zorunda olmaması avantajına sahiptir.

var parent = Backbone.View.extend({ 
    initialize : function() { 
    this.listenTo(Backbone, 'child-click-event', function (dataFromChild) { 
     this.doSomething(dataFromChild); 
    }, this); 
    } 
}); 

var child = Backbone.View.extend({ 
    //... 
    clickHandler : function() { 
    var data; // do something and get data 
    // Parent listens to this event. 
    Backbone.trigger('child-click-event', data); 
    } 
}); 
+0

Mükemmel teknik. Teşekkürler! –

1

Bir modele ihtiyaç duymazsanız, ana görünümüne alt görünüm için alt görünümden başvuru göndermenizi öneririm. Bir modele ihtiyacınız varsa, o zaman üst görünümde üst görünümdeki değişiklikleri dinleyin. Ben typescript aşina değilim, ama böyle bir şey yapmak istiyorum:

this.options.desktopView 
+0

Teşekkürler Evan. Masaüstü görünümümün muazzam olduğunu ve yüzlerce belge görünümü aldığımı varsayalım - bu hala iyi olur mu? Javascript ile hiç anlayamadım, bunun hafızada kötü bir şey olup olmadığı ya da orijinal nesne için bir referans olup olmadığı. – user888734

+0

Bence iyi olmalı. Bununla ilgili performans sorunlarıyla karşılaşırsanız, referansınızı, global 'uygulama' nesnesine ne olursa olsun bağlayabilirsiniz. – Evan

İlgili konular