Durandal:如何从导航模型中动态添加/删除项目?

时间:2013-10-11 13:31:30

标签: durandal durandal-navigation

以下是我遵循的步骤:

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>

这很好用,我点击欢迎页面中的一个“订单”链接,然后打开订单视图。 Here is a zip containing the project.

将刚刚打开的订单添加到导航栏的最佳方法是什么?点击订单链接后,我希望导航栏看起来像这样:

  

Durandal |欢迎| Flickr |订单#1

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

  

Durandal |欢迎| Flickr |订单#1 |订单#2

我希望能够关闭订单并以此结束(在关闭第一个订单后):

  

Durandal |欢迎| Flickr |订单#2

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

非常感谢任何关于如何做到这一点的指示。

以下是Durandal Google Group

中此问题的链接

1 个答案:

答案 0 :(得分:0)

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

我真的想不出另一种只是“添加”和/或“删除”路线的方法。这可能是你想要在github上作为产品的增强功能(至少对于子路由器)。