2

以下是我遵循的步骤:

1) 新建 asp.net mvc 4 项目 2) 选择了 durandal spa 模板 3) 在 shell.js 中,添加了这条路线...

{ route: 'orders/:id', moduleId: 'viewmodels/order', nav: false }

4)添加了一个viewmodel-order.js:

define([], function () {
    var Order = (function () {
        function Order() {
            this.orderId = '';
        }
        Order.prototype.activate = function (id) {
            this.orderId = id;
        };
        return Order;
    })();

    return Order;
});

5)添加了一个view-order.html:

<h1 data-bind="text: orderId"></h1>

6)添加了一些到welcome.html的链接:

<ul>
    <li><a href="#orders/1">Order #1</a></li>
    <li><a href="#orders/2">Order #2</a></li>
    <li><a href="#orders/3">Order #3</a></li>
    <li><a href="#orders/4">Order #4</a></li>
</ul>

这很好用,我单击欢迎页面中的“订单”链接之一,订单视图打开。 这是一个包含该项目的 zip。

将我刚刚打开的订单添加到导航栏的最佳方式是什么?单击订单链接后,我希望导航栏如下所示:

杜兰达尔 | 欢迎 | 弗里克 | 订单 #1

如果我点击另一个订单链接,我希望导航栏看起来像这样:

杜兰达尔 | 欢迎 | 弗里克 | 订单 #1 | 订单 #2

我希望能够关闭一个订单并最终得到这个(在关闭第一个订单之后):

杜兰达尔 | 欢迎 | 弗里克 | 订单 #2

最后但同样重要的是,当在订单之间导航时,我希望现有的 view+viewmodel 实例保持不变(注意:viewmodel 脚本返回一个构造函数,因此它与welcome 和 flickr 视图模型有点不同)。

任何有关如何执行此操作的指示将不胜感激。

这是Durandal Google Group中此问题的链接

4

1 回答 1

0

我相信您能够做到这一点的唯一方法是重新构建导航模型。在 google 群组上有一个讨论自定义子导航,您可以在其中调用 router.reset() 然后执行 router.mapRoutes([...]).{whatever} 来完成此操作。

我真的想不出另一种“添加”和/或“删除”路线的方式。这是您可能希望在 github 上抛出的东西,作为对产品的增强(至少对于子路由器)。

于 2013-10-11T13:45:38.663 回答