1

在我的 Durandal 应用程序中,我配置了多个父路由器,其中一些还配置了子路由器。问题是,当用户在不同的父页面或子页面之间导航时,之前路由的绑定生命周期也会随着现有路由的绑定生命周期而被触发。

子路由器在父视图模型中配置,父路由器在shell.ts中配置,如 Durandal 文档中所述。

如果在我的 shell.ts 中,在路由器数据绑定属性中,我将属性cacheViews 设置false并将alwaysTriggerAttach 设置true

<div data-bind="router:{cacheViews: false, alwaysTriggerAttach: true}"></div>

预期的结果是,当前路由正在加载时,不应加载前一个路由的绑定生命周期。例如,如果我们从#P2导航到#P1/C1,则不应加载 #P2 的绑定生命周期。

4

1 回答 1

0

如果没有足够的细节,很难正确回答这个问题。但是看起来从 DOM 中删除的 domElements 仍然具有活动的事件处理程序。您是否查看过http://durandaljs.com/documentation/api#class/Router/method/reset并尝试使用它?

淘汰赛中的默认行为是即使 DOM 元素从 dom 中删除,它仍然使 eventHandlers 处于连接状态,处于活动状态并且默认情况下不会删除它们。

在您的路由器 bindingHandler 中,在 init 方法中,在下面尝试,看看它是否修复

   ko.utils.domeNodeDisposal.addDisposeCallback(element,()=>{
   //do whatever you want here. like cleanup //reset(), etc
   })

https://knockoutjs.com/documentation/custom-bindings-disposal.html

于 2019-09-13T01:29:04.460 回答