3

我使用BBB和偉大的LayoutManager進行視圖。 不幸的是,我找不到重新呈現特定子視圖的方法。這裏是我的設置:Backbone LayoutManager重新渲染子視圖

Home.Views.Layout = Backbone.Layout.extend({ 
    template: "home/home", 
    el: "#main", 
    views: { 
     "#left-menu-container": new Home.Views.Leftmenu(), 
     "#searchbox": new Home.Views.Searchbox(), 
     "#content": new Home.Views.Content() 
    } 
}); 

Home.HomeView = new Home.Views.Layout(); 
Home.HomeView.render(); 

Home.Views.AddEditPatient = Backbone.View.extend({ 
    template: "......", 
    events: { 
     'click .dosomething': 'dosomething' 
    }, 
    dosomething: function(){ 
     // [dosomething] 

     // Only Render Sub-View, e.g. #content here... 
    } 
}); 

我不想重新渲染整個佈局,這將是可能再次調用Home.HomeView.render(),但我怎麼能只渲染子視圖在這個環境中?

回答

2

我想你想加入到做這樣的事情與backbone.layoutmanager

thisLayout.setView("#content", new View()).render();

的backbone.layoutmanager v0.6.6文檔可能會有所幫助 http://documentup.com/tbranyen/backbone.layoutmanager/#usage/nested-views

還要檢查 http://vimeo.com/32765088

+3

這應該工作。 Tim,LayoutManager的貢獻者指出我最好的解決方案:Home.HomeView.getView(「#content」)。render(); - 有時候生活很簡單 - – 2013-02-14 16:56:21

+0

getView!疑難雜症 – 2013-02-14 20:04:58

0

如果我正確理解你的問題,你可以在你的DoSomething功能做到這一點:

this.$("#divToRenderTo").html(new subView().render().$el); 

一定要具有「迴歸本;」在你的子視圖的渲染函數的末尾。

0

有兩種方式我一般都是用layoutmanager做到這一點:

  1. 在初始化函數中實例化視圖,然後將它們拖放到beforeRender中的視圖中。這使您的視圖可以訪問子視圖,因此您可以直接渲染它。

    initialize: function() { 
        this.subview = new SubView(); 
    }, 
    beforeRender: function() { 
        this.insertView(this.subview); 
    }, 
    doSomething: function() { 
        this.subview.render(); 
    } 
    
  2. 您可以使用view.getView(#selector)返回內嵌視圖,然後調用渲染上。

    doSomething: function() { 
        this.getView('#content').render(); 
    }