2013-03-25 10 views
6

Mam trasę, która ma parametry zapytania. Podczas aktywowania widoku parametry zapytania są gromadzone i przekazywane do żądania po stronie serwera. Nie wiem, jakie są parametry. Po prostu przekazuję je serwerowi do przetworzenia.Parametry zapytania w routerze Durandal

W metodzie aktywującej viewmodel parametr context jest obiektem zawierającym parametry zapytania oraz dwoma dodatkowymi elementami: routeInfo i routerem. Durandal dodaje je do parametrów zapytania. Po pierwsze, nie chcę, aby te przekazywały się po stronie serwera. Po drugie, jeśli moje parametry zapytania zawierają również te dwie nazwy, zostaną nadpisane.

Sprawdziłem kod routera i znalazłem, gdzie są one dodawane do moich parametrów (w dequeueRoute), ale nie znalazłem sposobu, aby zapobiec dodaniu, ani sposób, aby uzyskać tylko moje parametry zapytania bez nich.

Czy ktoś wie, w jaki sposób mogę uzyskać parametry zapytania bez informacji routeinfo i routera? I z ciekawości, dlaczego są one dodawane w pierwszej kolejności zamiast osobnego argumentu?

Odpowiedz

8

Twoje prawo. Poszedłem do przodu i przetestowałem, co mówisz i wydaje się, że wszystkie parametry zapytania są zapisywane w parametrze kontekstu.

więc jeśli masz trasy tak:

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

wewnątrz metody aktywacji:

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

Następnie context będzie obiekt JSON:

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

Tak więc parametry terystringa są zapisywane do t on context obiekt, ale jeśli twoje parametry kwerendy są routeInfo, router lub splat wtedy złe rzeczy się zdarzą. Zwłaszcza jeśli jego splat!

Tak, myślę, że po prostu nie korzystać z tych parametrów ..

Ponadto, jak można zobaczyć swoje parametry kwerendy są przekazywane do obiektu ikona. Możesz łatwo przeanalizować kwerendę wykonując:

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; 
} 

Coś w tym stylu. Możesz chcieć poprawić na tym .. po prostu to wymusiłem.

Możesz również uzyskać parametry ciągu zapytań z obiektu window.location. Z obiektu window.location.search będzie zawierał wszystko po deliminatorze ?.

Czy to odpowiada na twoje pytania?

+0

Jeśli nie robię czegoś złego, wygląda na to, że mam tylko właściwość splat, jeśli używam również mapAuto. Sądzę, że mógłbym go użyć, ale nie jestem pewien, co jeszcze może zrobić z moim routingiem. W każdym razie wydaje mi się, że najlepiej będzie po prostu użyć window.location.search. Naprawdę chciałbym, żeby był sposób na zrobienie tego bez konieczności analizowania łańcucha. –

+0

Durandal jest we wczesnym stadium, a moduł routera jest wtyczką. Daj mu trochę czasu. Założę się, że w nadchodzących miesiącach będzie znacznie lepiej. Biblioteka nadal jest aktywnie rozwijana. Dobrze, że go używasz, ponieważ w miarę rozwoju będziesz o wiele bardziej kompetentny. –

Powiązane problemy