Backbone LayoutManager重新渲染子视图

时间:2013-02-14 14:25:42

标签: javascript backbone.js backbone-views backbone-boilerplate backbone-layout-manager

我正在使用BBB和优秀的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()会有什么可能,但是如何才能在此设置中仅渲染子视图?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

如果我理解你的问题,你可以在dosomething函数中执行此操作:

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

一定要“退回”;在子视图的渲染功能结束时。

答案 2 :(得分: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)返回嵌入视图,然后在其上调用render。

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