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(); 
    }