Nel nuovoEmber.Router
che spedisce con Ember 1.0-rc2, è possibile aggiungere percorso in fase di esecuzione?Ember-Router: come aggiungere un percorso in fase di esecuzione in Ember 1.0-rc2?
risposta
Attualmente non esiste un metodo supportato per farlo. Il App.Router.map
chiamata viene gestita da linee 235-247 di questo codice: https://github.com/emberjs/ember.js/blob/master/packages/ember-routing/lib/system/router.js
Ember.Router.reopenClass({
map: function(callback) {
var router = this.router = new Router();
var dsl = Ember.RouterDSL.map(function() {
this.resource('application', { path: "/" }, function() {
callback.call(this);
})
});
router.map(dsl.generate());
return router;
}
La mappa viene sovrascritto ogni volta che si chiama Router.map
come callback per la chiamata precedente a Router.map
non viene mantenuto.
Modifica bene o nel male, ho una richiesta di pull per modificare il comportamento per consentire a più chiamate al App.Router.map
. Vedremo cosa succede. È possibile seguire qui https://github.com/emberjs/ember.js/pull/2485
Un altro Modifica
Ho scritto un succo di fare quello che la mia richiesta di pull fa in userland. Ciò ti consentirà di mappare i percorsi in fase di runtime. Basta aggiungere questo codice e quindi sostituire le chiamate al App.Router.map
con il metodo che ho definito
https://gist.github.com/grep-awesome/5406461
risposta Modifica Modifica
A partire da questa richiesta di pull, è ora possibile chiamare più volte map
. https://github.com/emberjs/ember.js/pull/2892
Vedo che la risposta di wmarbut non è stata accettata, ma è buona (per me). Sembra che la sua patch sia in arrivo nella versione di Ember, ma fino ad allora questo è un codice che usa la sua patch. (Non accettare la mia risposta, sono contento di averlo trovato.) Sto pensando di usarlo come parte di una soluzione per permettere ai contenuti di guidare la navigazione. Buona domanda, user1517325 e grazie, wmarbut!
// was an all-in-one router map as Ember likes it
// App.Router.map(function() {
// this.resource("foods", function(){
// this.route("index", {path: "/"});
// });
// this.route("fourOhFour", { path: "*:"});
// });
//wmarbut's workaround until his patch is applied
App.map_routes = [];
App.MapRoutes = function(routes) {
App.map_routes.push(routes);
return App.Router.map(function() {
var route_lamda, _i, _len, _ref;
_ref = App.map_routes;
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
route_lamda = _ref[_i];
route_lamda.call(this);
}
return true;
});
};
//partial mapping
App.MapRoutes(function() {
this.resource("foods", function(){
});
});
//some more mapping
App.MapRoutes(function() {
this.resource("foods", function(){
this.route("index", {path: "/"});
});
});
//even more mapping
App.MapRoutes(function() {
this.route("fourOhFour", { path: "*:"});
});
Nella versione più recente ember.js rc7 è stata aggiunta la funzionalità alla Router.map
per permettergli di essere chiamato più volte senza la mappa viene sovrascritto. Ciò consentirà l'aggiunta di rotte in fase di runtime.
Spero che aiuti.
Controlla la modifica che ho appena aggiunto, ti dà una soluzione che si aprirà e funzionerà – wmarbut