我在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');
}
});
}
});
上述功能完美运行并删除模型,但在删除模型后,它仍然保留在其视图上,直到我手动导航到某处。我读了一下,试图管理如何在此事件后呈现主视图或重定向到它,但没有成功。
答案 0 :(得分:2)
您正在寻找http://backbonejs.org/#Router-navigate功能,并将trigger
选项设置为true。
以下是一个例子:http://jsfiddle.net/x3t7u5p0/
点击" Home"或"关于"链接将更改视图,但是我添加了延迟的程序化视图更改,当关于视图呈现时,它将在延迟后切换回Home
render: function () {
this.$el.html(this.template);
_.delay(function() {
appRouter.navigate('home', {trigger: true});
}, 500);
}