2013-04-10 9 views

risposta

4

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

1

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: "*:"}); 
    }); 
1

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.