Backbone LayoutManager повторно отображает подвиды

Я использую 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 ответа

Решение

Я думаю, что вы хотите добавить, чтобы сделать что-то подобное с backbone.layoutmanager

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

Может быть полезна документация backbone.layoutmanager v0.6.6 http://documentup.com/tbranyen/backbone.layoutmanager/

Также проверьте http://vimeo.com/32765088

Если я правильно понимаю ваш вопрос, вы можете сделать это с помощью функции дозирования:

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

Обязательно нужно "вернуть это"; в конце функции визуализации вашего под-представления.

Есть два способа, которыми я обычно делаю это с 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();
    }