Перенаправить или отобразить другое представление события

#javascript #jquery #backbone.js

#javascript #jquery #backbone.js

Вопрос:

Я создаю небольшое приложение CRUD в Backbone, и я немного застрял с необходимостью перенаправлять из одного представления в другое. Мое приложение состоит из layout представления, в котором отображаются другие представления, и маршрутизатора. Вот оно:

 var router = Backbone.Router.extend({
     routes: {
         '': 'home',
         'resumes/:id': 'showResume'
     },

     home: function () {
         // renders a index view with my collection
         this.layout.render(new ResumeList({collection: resumes});
     },
     showResume: function () {
         if (!this.fullResume) {
             this.fullResume = new FullResume({model: new Resume()});
         }
         // allowing to navigate via url with model id
         this.fullResume.model.set('id', id).fetch({
             context: this,
             success: function () {
                 this.layout.render(this.fullResume);
             }
         });
     }
});
  

Затем, на мой FullResume взгляд, у меня есть delete событие, которое уничтожает модель. Вот оно:

 var FullResume = Backbone.View.extend({
    // tagName and other stuff
    events: {
        // other events
        'click #delete': 'deleteResume'
    },
    // initialize, render and other functions
    deleteResume: function () {
        this.model.destroy({
            success: function (res) {
                console.log('DELETE model'   res.toJSON().id);
            },
            error: function () {
                console.log('Failed to DELETE');
            }
        });
    }
});
  

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

Ответ №1:

Вы ищете http://backbonejs.org/#Router-navigate функция с trigger параметром, установленным в true.

Вот пример: http://jsfiddle.net/x3t7u5p0 /

Нажатие на ссылки «Главная» или «О программе» изменит представление, однако я добавил отложенное изменение программного представления: когда отображается представление «О программе», оно переключится обратно на Home после задержки

   render: function () {
      this.$el.html(this.template);
      _.delay(function() {
          appRouter.navigate('home', {trigger: true});
      }, 500);
  }
  

Комментарии:

1. если ваш маршрутизатор не используется совместно в вашем коде, вы можете перемещаться напрямую с помощью Backbone.history.navigate(...) .