2012-06-13 2 views
2

Я хочу использовать BackboneJS для сайтов с одной страницей. Структура Я имею в виду использование, это есть div#pageWrapper для погрузки видом наBackboneJS Сайты для одной страницы: прикрепление и очистка просмотров

# a simple example view 
class View1 extends Backbone.View 
    render: -> 
     @$el.html @template() 


class AppRouter extends Backbone.Router 
    routes: 
     "": "home" 
     "view1": "view1" 
     "view2": "view2" 

    home: -> 
     # init, render, attach to body. repeat for other controller actions 
     view = new HomeView() 
     view.render() 
     $("#pageWrapper").html view.el 

ли обычный способ сделать это? Или есть какая-то модель дизайна? Я не вел уборку, мне это нужно? Или это побочный эффект просто замены html оберток страниц?

ответ

3

Да, вам определенно необходимо обрабатывать закрытие представлений и их правильное удаление. Если вы этого не сделаете, вы получите утечки памяти и «зомби» - взгляды, которые должны быть мертвы, но нет.

Я писал об этом подробно:

http://lostechies.com/derickbailey/2011/09/15/zombies-run-managing-page-transitions-in-backbone-apps/

http://lostechies.com/derickbailey/2011/12/12/composite-js-apps-regions-and-region-managers/

Суть его в том, что вы должны управлять очистки вашего взгляда в вашей точке зрения непосредственно, а затем использовать стандартизированный процесс для вызова метода очистки вашего вида.

Например, я использую объект, чтобы показать/удалить/заменить свои взгляды на экране:


Region = (function (Backbone, $) { 
    var currentView; 
    var el = "#mainregion"; 
    var region = {}; 

    var closeView = function (view) { 
     if (view && view.close) { 
      view.close(); 
     } 
    }; 

    var openView = function (view) { 
     view.render(); 
     $(el).html(view.el); 
     if (view.onShow) { 
      view.onShow(); 
     } 
    }; 

    region.show = function (view) { 
     closeView(currentView); 
     currentView = view; 
     openView(currentView); 
    }; 

    return region; 
})(Backbone, jQuery); 

Просто убедитесь, что ваша точка зрения имеет метод close в нем, и этот код будет очистить его для вы. Простой close реализация будет выглядеть следующим образом:


Backbone.View.prototype.close = function(){ 
    this.remove(); 
    this.unbind(); 
    if (this.onClose){ 
    this.onClose(); 
    } 
} 

и теперь все ваши взгляды имеют этот близкий метод.

См. Статьи для получения дополнительной информации.

0

Да, обычным способом сделать сайт на одной странице является наличие некоторого html-элемента, внутри которого вы будете отображать страницу в любой момент.

Что касается очистки. Вы должны очистить элемент контейнера и в пределах каждого Просмотра, который нужно очистить, вы должны отменить все события, относящиеся к этому представлению, и если вы используете, например, ModelBinding, вы также должны отменить это. Таким образом, в основном

Cleanup всех подвиды -> разрывания события, касающееся эта точка зрения -> ясно HTML

Обработка очистка важна, чтобы избежать взглядов призраков и событие Мессинг вещи.

Смежные вопросы