我将我的视图和路由器分隔成需要的单独文件。然后我有一个main.js文件实例化路由器,并呈现我的默认视图。使用Backbone.js路由器浏览通过require.js模块化的视图
我的路由器将视图('查看/:id')和编辑('编辑/:id')作为路由。在main.js中,当我实例化路由器时,我可以硬编码router.navigate('View/1',true)并且导航工作正常。在我的视图文件中,当我点击编辑链接时,我想调用router.navigate('View /'+ id,true),但我不知道该怎么做。
我已经成功调用Backbone.history.navigate('View /'+ id,true),但我不觉得我应该依赖全局Backbone对象。
我尝试通过({路由器: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);
},
});
});
嗨,我正在做类似你的事情,打算在我的View模块中使用router.navigate()。你是如何最终实现这一目标的? Thx非常提前。 – chaonextdoor
我结束了使用Backgone.history.navigate。由于我将视图分离为视图,路由器和模型的单个文件,并使用require.js加载它们。将路由器或事件对象传递给我的所有视图太麻烦了。全球似乎是最有意义的,因为骨干已经在全球命名空间。 – MrGrigg
so backbone.history.navigate等于router.navigate? – chaonextdoor