查询Durandal路由器中的参数

我有一个具有查询参数的路由.激活视图时,将收集查询参数并将其传递给服务器端请求.我不知道参数是什么.我只是将它们传递给服务器进行处理.

在我的viewmodel activate方法中,context参数是一个包含查询参数的对象,还有两个额外的项:routeInfo和router. Durandal将这些添加到查询参数中.首先,我不希望那些传递到服务器端.其次,如果我的查询参数也包含这两个名称,那么它们将被覆盖.

我查看了路由器代码并找到了它们添加到我的参数中的位置(在dequeueRoute中),但是没有办法阻止添加,也没有办法只获取没有它们的查询参数.

有没有人知道如何在没有routeinfo和路由器的情况下获取查询参数?出于好奇,为什么他们首先被添加而不是单独的论点?

你的权利.我继续测试你的说法,似乎所有的查询字符串参数都写入了context参数.

所以如果你有这样的路线:

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

在你的激活方法中:

define(function() {
   return {
     activate: function(context) {
        console.log(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']
}

因此,查询字符串参数被写入上下文对象,但如果您的查询字符串参数是routeInfo,router或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对象开始,它将包含所有内容? deliminator.

这回答了你的问题吗?

相关文章
相关标签/搜索