0

我们正在开发一个应用程序,durandaljs我们似乎遇到了子路由器的问题,或者至少是我们不理解或无法弄清楚的问题。让我们从一个例子开始。

Route => /part1/:id/part2/:id2/part3

问题是,main.js在导航时,每个级别的路由都会调用 activate 方法:

= Root (activate called)
== Part1 (activate called)
=== Part 2 (activate called)
==== Part 3 (activate called (normal since this is the initiator of everything else since that's where we have navigating to, no more child router declare here as it live in the child router declare in Part2))

我们发现这种行为有点奇怪,想知道这是正常行为还是我们在子路由器上做错了什么。为什么每个子级别都需要重新运行他们的激活方法?IHMO,只有我们导航到的当前模型应该触发他的激活方法,并且任何其他子页面都不应该触发这个事件。

我们正在使用最新DurandalJS可用的,2.1.0并且我们正在使用 构建应用程序Typescript,尽管我不认为它在这里改变了什么。

4

1 回答 1

1

这是正常行为。每当激活子级时,激活函数就会在整个层次结构中传播。这与停用行为不匹配。在父级仍在实例化时停用子级不会调用父级上的停用。

处理此问题的最佳方法是打开激活器回调的参数,因为激活参数被传递给每个激活器回调。因此,对于第 1 部分,您可能有

activate(id1, id2) {
    if (id1 === null && id2 === null) {
        // logic
    }
}

这错过了您导航到的边缘情况/part1//part2,因此如果您担心这一点,您可以在根路由器上使用正则表达式进行更可靠的检查。

import router = require('plugins/router');
activate(id1, id2) {
    var route = /^part1\/?$/;
    if (route.test(router.activeInstruction)) {
        // logic
    }
}
于 2015-02-19T15:33:13.703 回答