2013-03-25 7 views
6

クエリパラメータを持つルートがあります。ビューをアクティブにすると、クエリパラメータが収集され、サーバー側の要求に渡されます。私はパラメータが何であるか分からない。私は単にそれらを処理のためにサーバーに渡します。Durandalルータのクエリパラメータ

私のviewmodel activateメソッドでは、contextパラメータはクエリパラメータと、routeInfoとrouterの2つの余分な項目を含むオブジェクトです。 Durandalはこれらをクエリパラメータに追加します。まず、私はそれらをサーバー側に渡すことは望ましくありません。第二に、もし私のクエリのパラメータもこれらの2つの名前を含む場合、それらは上書きされます。

私はルータコードを見て、それらが(dequeueRouteの)私のパラメータにどこに追加されているのかを見出しましたが、追加を防ぐ方法がなく、それらを使わないでクエリパラメータを取得する方法もありません。

routeinfoとルータなしでクエリパラメータを取得する方法を知っている人はいますか?好奇心から、別の議論ではなく、なぜ最初に追加されたのですか?

答えて

8

あなたの権利。私は先に進み、あなたの言うことをテストしました。そして、すべてのクエリーストリングパラメータがコンテキストパラメータに書き込まれているように見えます。

あなたは、このようなルートがある場合はそう:あなたのactivateメソッド内の

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

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

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

を次にcontextはのJSONオブジェクトになります

したがって、クエリ文字列のパラメータはtに書き込まれています彼contextオブジェクトですが、クエリ文字列のパラメータがrouteInforouter、またはsplatの場合、悪いことが起こります。特にその場合splat

だから、私はあなたのクエリ文字列パラメータがスプラットオブジェクトに渡され見ることができるようにだけ、また...これらのパラメータを使用し

いけないと思います。

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

次のようにすると、簡単にクエリ文字列を解析できます。あなたはそれを改善したいかもしれません..私はちょうどそれをホイップしました。

window.locationオブジェクトからクエリ文字列パラメータを取得することもできます。 window.location.searchオブジェクトからは、?デリミネーターの後ろのすべてが含まれます。

これはあなたの質問に答えますか?

+0

何か間違っていない限り、mapAutoも使用すると、私はスプラットプロパティを取得するだけです。私はそれを使うことができると思うけど、私のルーティングには他に何ができるのか分からない。いずれにしても、私の周りの遊びから、私にとってはwindow.location.searchを使うのが最善の方法です。私は実際に自分自身で文字列を解析することなくこれを行う方法があったと思う。 –

+0

durandalは初期段階にあり、ルータモジュールはプラグインです。時間をつけてください。今後数ヶ月ではるかに良いと思います。図書館は依然として積極的に取り組んでいる。それが成長するにつれて、それははるかに精通しているだろうから、あなたは今それを使うのが良いです。 –

関連する問題