绑定生命周期要求在导航到任何路线时删除视图:杜兰达尔



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

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

在我的shell.ts中,在路由器数据绑定属性中,我将属性cacheViews指定为false,alwaysTriggerAttach 为true

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

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

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

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

在您的路由器绑定处理程序中,在 init 方法中,尝试下面,看看它是否修复

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

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

最新更新