我將我的視圖和路由器分隔成需要的單獨文件。然後我有一個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