9

クエリパラメータを持つルートがあります。ビューをアクティブ化すると、クエリパラメータが収集され、サーバー側のリクエストに渡されます。パラメータが何であるかわかりません。それらをサーバーに渡して処理するだけです。

私のviewmodelactivateメソッドでは、コンテキストパラメーターは、クエリパラメーターに加えて、routeInfoとrouterの2つの追加アイテムを含むオブジェクトです。Durandalは、これらをクエリパラメータに追加します。まず、それらをサーバー側に渡してほしくない。次に、クエリパラメータにこれら2つの名前も含まれている場合、それらは上書きされます。

ルーターコードを調べて、パラメーターのどこに追加されているか(dequeueRoute内)を見つけましたが、追加を防ぐ方法も、パラメーターなしでクエリパラメーターだけを取得する方法もありません。

routeinfoとrouterなしでクエリパラメータを取得する方法を知っている人はいますか?そして好奇心から、なぜそれらは別個の議論の代わりにそもそも追加されるのですか?

4

1 に答える 1

10

あなたの右。私は先に進んであなたの言っていることをテストしました、そしてすべてのクエリ文字列パラメータがコンテキストパラメータに書き込まれているようです。

したがって、次のようなルートがある場合:

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

activateメソッド内:

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

次に、contextは次のjsonオブジェクトになります。

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

したがって、クエリ文字列パラメータはcontextオブジェクトに書き込まれますが、クエリ文字列パラメータが、、、routeInfoまたはrouterの場合splat、悪いことが起こります。特にその場合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オブジェクトからは、?デリミネーターの後のすべてが含まれます。

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

于 2013-03-26T00:40:08.963 に答える