Я разделяю свои представления и маршрутизатор на отдельные файлы с требованием. Затем у меня есть файл main.js, который создает экземпляр маршрутизатора, а также отображает мое представление по умолчанию.
Мой маршрутизатор имеет вид ('View/: id') и редактирует ('Edit/: id') в качестве маршрутов. В main.js, когда я создаю экземпляр маршрутизатора, я могу hardcode router.navigate('View/1', true), и навигация работает нормально. В моем файле просмотра, когда я нажимаю ссылку на редактирование, я хочу вызвать router.navigate('View/' + id, true), но я не уверен, как это сделать.
У меня был успех с вызовом Backbone.history.navigate('View/' + id, true), но я не чувствую, что должен полагаться на глобальный объект Backbone.
Я попытался передать ({router: appRouter}) свои представления, чтобы я мог использовать this.options.router.navigate(), однако это не работало для меня.
Если вам интересно, вот куча кода из моего приложения:
Router:
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);
},
});
});