Подтвердить что ты не робот

Шаблон для управления представлениями в магистрали

Из GWT, Backbone, кажется, пропустил встроенное решение о том, как обрабатывать жизненный цикл представления. В GWT каждое действие, которое в большей или меньшей степени эквивалентно представлению в магистрали, управляется ActivityManager, который вызывает onStart/onStop в действии, передает EventBus и элемент, в котором может быть реализована операция. ActivityManager отменит все события, которые активность привязана к eventbus, и удалит представление из DOM.

В Backbone легко привязать события к модели и коллекции, но вы должны удалить их вручную, и нет общего метода api, где вы это сделаете.

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

4b9b3361

Ответ 2

вы правы, в этом нет возможности построить решение (пока).

однако, конечно, возможно расширить магистраль, чтобы обеспечить эту функциональность, Derick Bailey написал сообщение в блоге об этом недавно,

смотрите здесь: http://lostechies.com/derickbailey/2011/09/15/zombies-run-managing-page-transitions-in-backbone-apps/

это ни в коем случае не святой Грааль, вы свободны реализовать по своему усмотрению, но это очень прямой подход, для обработки представлений зомби, теперь вам все равно нужно позаботиться о других существах, сканирующих в вашей памяти, но это начинается с просмотров по крайней мере!

Ответ 3

Я использую настраиваемый BaseView, который расширяет метод удаления Backbone:

app.BaseView = Backbone.View.extend({

    views: [], // array to keep a ref of child-views for proper disposal later on

    remove: function() {

        // dispose any sub-views
        _.each(this.views || [], function(view) {
            view.remove();
        });

        // if the inheriting class defines a custom on-remove method, call it!
        _.isFunction(this.onRemove) && this.onRemove();

        // unbind all events from this view
        this.off();

        // finally, call Backbone default remove method to
        // remove the view from the DOM
        Backbone.View.prototype.remove.call(this);
    }
}

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

Ответ 4

Я отправляю свое решение для управления представлением https://github.com/thomasdao/Backbone-View-Manager.

Менеджер просмотров всегда будет очищать существующий вид перед созданием нового представления. Теперь я инициализирую новый вид:

newView = VM.createView("newView", function(){
             return new View();
          };

Если я хочу повторно использовать представление вместо создания нового, я могу использовать

newView = VM.reuseView("newView", function() {
              return new View();
          }

Различие между VM.reuseView и VM.createView заключается в том, что reuseView будет искать существующее представление с именем "newView", если оно вернется к вам. В остальном он выполнит функцию обратного вызова и результат кэширования. VM.createView всегда выполняет функцию обратного вызова и очищает существующее представление для вас. Следовательно, вы можете использовать VM.createView, если представления динамичны и часто меняются