在子路由器之间导航时保​​留查询字符串

时间:2014-07-14 14:41:46

标签: javascript durandal

这是我的孩子路由器和查看代码:

router.createChildRouter().makeRelative({
  moduleId: 'products',
  fromParent: true,
  dynamicHash: ':id'
}).map([
  { route: 'specs', title: 'Specs', moduleId: 'specs', nav: true },
  { route: 'reviews', title: 'Reviews', moduleId: 'reviews', nav: true }
]).buildNavigationModel();

<ul class="tabs" data-bind="foreach: router.navigationModel()">
   <li data-bind="css: { selected: isActive }"><a href="{{dynamicHash}}">{{title}}</a></li>
</ul>

将生成两个包含以下网址的标签:

  • example.com/#products/200/specs
  • example.com/#products/200/reviews

我的评论页面上有一个工具栏,按日期或评级对内容进行排序,因此网址变为:

  • example.com/#products/200/reviews?date=asc&rating=desc

但是当我切换标签并返回时,我丢失了查询字符串。有没有办法将它们保留在URL中,直到我清除过滤器?

1 个答案:

答案 0 :(得分:0)

如果不知道您的确切实现,是否有任何理由不将其设置在负责管理状态的模块中?

products /(id)/ specs view model / w / e -

define (['config.queryparams'], function (queryParams) {

    var ctor = function () {
        var self = this;
        // Assume the queryParms module has an observable called parameters
        self.queryparameters = queryParams.parameters;
    }

    ctor.prototype.active(id, querystring) {
        var self = this;
        // Set the queryParams.parameters observable to the query string
        self.queryparameters(querystring);
    }

    return ctor;

});

然后在你的config.queryparams模块中 -

define([], function () {

    var parameters = ko.observable();

    var module = {
        parameters: parameters
    }

});

现在只需从您的其他模块引用config.queryparams并将其共享。有意义吗?