ビューとルーターを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オブジェクトに依存する必要があるとは思いません。
this.options.router.navigate()を使用できるように、ビューに({router:appRouter})を渡してみましたが、うまくいきませんでした。
気になる方のために、私のアプリのコードをいくつか紹介します。
ルーター:
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);
},
});
});