重定向或呈现事件上的另一个视图

Redirect or render another view on event

本文关键字:另一个 视图 事件 重定向      更新时间:2023-09-26

我正在Backbone中构建一个小CRUD应用程序,并且我需要从一个视图重定向到另一个视图。我的应用由一个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');
            }
        });
    }
});

上面的函数完美地工作并删除模型,但在删除模型后,它仍然保持在它的视图上,直到我手动导航到某个地方。我读了一点,并试图管理如何在此事件后渲染主视图或重定向到它,但没有成功。

您正在寻找将trigger选项设置为true的http://backbonejs.org/#Router-navigate函数。

下面是一个例子:http://jsfiddle.net/x3t7u5p0/

点击"Home"或"About"链接会改变视图,但是我添加了一个延迟的编程视图更改,当About视图渲染时,它会在延迟后切换回Home

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