3

我将 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() 会发生什么,但是我如何才能在此设置中仅渲染子视图?

4

3 回答 3

2

我想你想用backbone.layoutmanager添加做这样的事情

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

骨干网.layoutmanager v0.6.6 文档可能会有所帮助 http://documentup.com/tbranyen/backbone.layoutmanager/#usage/nested-views

另请查看 http://vimeo.com/32765088

于 2013-02-14T16:33:57.287 回答
0

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

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

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

于 2013-02-14T14:58:30.170 回答
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();
    }
    
于 2014-03-13T00:38:23.357 回答