2013-03-25 2 views
6

Ho un percorso con parametri di query. Quando si attiva la vista, i parametri della query vengono raccolti e passati a una richiesta lato server. Non so quali sono i parametri. Li ho semplicemente passati al server per l'elaborazione.Parametri di query nel router Durandal

Nel metodo di attivazione viewmodel, il parametro di contesto è un oggetto che contiene i parametri di query, oltre a due elementi aggiuntivi: routeInfo e router. Durandal li aggiunge ai parametri della query. Innanzitutto, non voglio che siano passati sul lato server. In secondo luogo, se i miei parametri di query contengono anche questi due nomi, vengono sovrascritti.

Ho esaminato il codice router e ho trovato dove sono stati aggiunti ai miei parametri (in dequeueRoute), ma non trovo alcun modo per impedire l'aggiunta, né un modo per ottenere solo i miei parametri di query senza di essi.

Qualcuno sa come posso ottenere i parametri di query senza routeinfo e router? E per curiosità, perché vengono aggiunti in primo luogo invece di un argomento separato?

risposta

8

Il tuo diritto. Sono andato avanti e testato ciò che hai detto e sembra che tutti i parametri di querystring vengano scritti nel parametro di contesto.

quindi se avete un percorso come questo:

http://www.somesite.com/#/services/?routeInfo=value1&router=value2&param1=value3

all'interno del vostro metodo Activate:

define(function() { 
    return { 
    activate: function(context) { 
     console.log(context); 
    } 
    }; 
}); 

Poi il context sarà un oggetto JSON di:

{ 
    routeInfo: {...}, // info object of moduleId and such 
    router: {...}, // reference to the router.js pluggin 
    param1: 'value3', 
    splat: ['?routeInfo=value1&router=value2&param1=value3'] 
} 

Quindi, i parametri di querystring vengono scritti in t è l'oggetto context ma se i parametri di querystring sono routeInfo, router o splat, accadranno cose brutte. Soprattutto se il suo splat!

Quindi, credo che appena non utilizzare questi parametri ..

Inoltre, come si può vedere i parametri querystring vengono passati all'oggetto splat. Si può facilmente analizzare querystring facendo:

function parsePlease(queryString) { 
    var obj = {}; 
    var splitV = queryString.split('&'); 
    for (var i = 0, max = splitV.length; i< max; i++) { 
     obj[splitV[i].split('=')[0]] = splitV[i].split('=')[1]; 
    } 
    return obj; 
} 

Qualcosa del genere. Potresti voler migliorare su questo ... l'ho appena montato.

Inoltre, è possibile ottenere i parametri della stringa di query dall'oggetto window.location. Dall'oggetto window.location.search conterrà tutto dopo il deliminatore ?.

Questo risponde alle vostre domande?

+0

A meno che non stia facendo qualcosa di diverso, sembra che ottengo solo la proprietà splat se uso anche mapAuto. Immagino che potrei usarlo, ma non sono sicuro di cos'altro farà al mio routing. In ogni caso, dal mio modo di suonare più lontano, sembra che la cosa migliore per me sia semplicemente usare window.location.search. Spero davvero che ci fosse un modo per farlo senza dover analizzare la stringa da solo. –

+0

durandal è nelle sue fasi iniziali e il modulo router è un pluggin. Dagli un po 'di tempo .. Scommetto che sarà molto meglio nei prossimi mesi. La biblioteca è ancora attivamente lavorata. È bello che tu lo stia usando ora perché man mano che crescerai sarai molto più informato. –