我使用 require 将我的视图和路由器分成单独的文件。然后我有一个 main.js 文件来实例化路由器,并呈现我的默认视图。
我的路由器有视图('View/:id')和编辑('Edit/:id')作为路由。在 main.js 中,当我实例化路由器时,我可以硬编码 router.navigate('View/1', true) 并且导航工作正常。在我的视图文件中,当我单击编辑链接时,我想调用 router.navigate('View/' + id, true),但我不确定我应该如何执行此操作。
我已经成功调用 Backbone.history.navigate('View/' + id, true),但我觉得我不应该依赖全局 Backbone 对象。
我尝试将 ({ router: appRouter }) 传递给我的视图,以便我可以使用 this.options.router.navigate(),但这对我不起作用。
如果您好奇,这里有一堆来自我的应用程序的代码:
路由器:
define(['./View', './Edit'], function (View, Edit) {
return Backbone.Router.extend({
routes: {
'View/:id': 'view',
'Edit/:id': 'edit'
},
view: function (id) {
var model = this.collection.get(id);
var view = new View({ model: model });
view.render();
},
edit: function (id) {
var model = this.collection.get(id);
var edit = new Edit({ model: model });
edit.render();
}
});
});
看法:
define(function () {
return Backbone.View.extend({
template: Handlebars.compile($('#template').html()),
events: {
'click .edit': 'edit'
},
render: function () {
//Create and insert the cover letter view
$(this.el).html(this.template(this.model.toJSON()));
$('#View').html(this.el);
return this;
},
edit: function () {
Backbone.history.navigate('Edit/' + this.model.id, true);
},
});
});