Магистраль: как расположить вид / модель при навигации к маршруту? - PullRequest
1 голос
/ 23 октября 2011

Я создаю веб-приложение, в котором пользователь создает инвентарь предметов и использует папки для их классификации.Теперь предположим, что у меня есть две такие папки:

  • Все предметы (маршрут: /)
  • Закрытые предметы (маршрут: # get / closet / id)

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

1 Ответ

4 голосов
/ 23 октября 2011

Есть много способов приблизиться к этому, и это действительно зависит от того, как вы делаете навигацию. Если вы меняете маршруты с помощью реальных ссылок или с помощью router.navigate(), ваш router отправит событие route:<route name>, которое вы можете прослушать, передавая те же аргументы обработчику, что и функции маршрутизации.

В том, что оказалось демонстрацией того, сколько времени потребуется для настройки кода тестового примера с помощью Backbone, я сделал вам jsFiddle для иллюстрации этого подхода: http://jsfiddle.net/nrabinowitz/ZrgJF/7/

Многое из этого просто код установки; важными частями для этого вопроса являются маршрутизатор:

var MyRouter = Backbone.Router.extend({
    routes: {
        'view/:id' : 'openView'
    },
    openView: function(id) {
        app.openView(id)
    }
});
router = new MyRouter();

И вид, который связывает удаление с маршрутом:

var MyView = Backbone.View.extend({
    initialize: function(opts) {
        this.id = opts.id;
        router.bind('route:openView', this.dispose, this); 
    },
    // id is the same as the route argument
    dispose: function(id) {
        if (id != this.id) {
            this.remove();
        }
    }
    // etc
});
...