Sto separando le viste e il router in file separati con require. Quindi ho un file main.js che crea un'istanza del router e inoltre visualizza la mia vista predefinita.Utilizzo del router Backbone.js per navigare tra le viste modularizzate con require.js
Il mio router ha una vista ('Visualizza /: id') e modifica ('Modifica /: id') come rotte. In main.js, quando istanzio il router, posso hardcode router.navigate ('View/1', true) e la navigazione funziona bene. Nel mio file di visualizzazione, quando clicco sul link di modifica, voglio chiamare router.navigate ('Visualizza /' + id, vero), ma non sono sicuro di come dovrei farlo.
Ho avuto successo chiamando Backbone.history.navigate ('Visualizza /' + id, vero), ma non mi sento come dovrei fare affidamento sull'oggetto Backbone globale.
Ho provato a passare ({router: appRouter}) alle mie visualizzazioni, quindi ho potuto usare this.options.router.navigate(), tuttavia non funzionava per me.
Nel caso foste curiosi, ecco un mucchio di codice dalla mia app:
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();
}
});
});
Vista:
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);
},
});
});
Ciao uomo, sto facendo qualcosa come il tuo, con l'intenzione di usare router.navigate() nel mio modulo View. E come hai ottenuto questo alla fine? Grazie molto in anticipo. – chaonextdoor
Ho finito per utilizzare Backgone.history.navigate. Dal momento che sto separando le mie viste in singoli file per visualizzazioni, router e modelli e utilizzando require.js per caricarli. Era troppo difficile passare un router o un oggetto evento a tutte le mie viste. Il globale sembrava avere più senso, dal momento che Backbone era già nello spazio dei nomi globale. – MrGrigg
quindi backbone.history.navigate è uguale a router.navigate? – chaonextdoor