durandaljs路由器:导航:组合完成射击太快

时间:2014-03-27 22:28:38

标签: durandal durandal-2.0 durandal-navigation

我的问题是:什么是了解子模块何时完全加载和完成合成的最佳方法,以便我可以测试该模块的html内容?

我正在尝试编写一些在路线完全完成构图后运行的集成测试 因此,我测试结构的方式是:
在'navigate()'调用之前,我附上:
router.on('router:navigation:composition-complete', callback)
接下来我打电话:
router.navigate('parent/child')
我的测试代码在'router:navigation:composition-complete'

的回调中

问题是,路由正在调用子路由。也就是说,父路由指向加载子路由的模块。路由在我的应用程序中工作正常,但是当我在我的测试中监听'router:navigation:composition-complete'事件时,事件在父模块加载之后立即触发,在子模块甚至加载之前。 此外,这仅适用于第二次测试。我的意思是,如果我有一个导航到路线的测试,则在子模块正确加载后触发事件。然后在该测试运行之后,如果我在新测试中导航到新路由以便我可以测试,该事件仅在父模块加载后立即触发。

那么,我怎样才能正确地知道子模块何时完成组合,以便我可以测试模块的html内容?

以下是我的路线结构的示例,以便更好地了解我看到的问题:

    router.map([
        /*{durandal:routes}*/
        {"route": 'parent*details',"moduleId":"parent/index","title":"Parent", hash: '#parent'}
    ]).buildNavigationModel();

然后在parent / index.js中我有这个:

var childRouter = router.createChildRouter()
    .makeRelative({
        moduleId:'',//refers to the 'parent' folder
        fromParent: true
    })
    .map([
        { route: 'child', moduleId: 'parent/viewmodels/child', title: 'Child', type: 'intro', nav: true}
    ]).buildNavigationModel();

那么如果我调用:router.navigate('parent / child')它会在父/ index.js加载后立即触发composition-complete事件,而不是在父/ viewmodels / child.js加载时。

1 个答案:

答案 0 :(得分:1)

我不确定这个:Durandal router / lifecycle events when using a childRouter可以帮助你,但我认为这个想法是一样的