我正在开发一个现有的 SPA,我们逐步用 Aurelia 组件替换组件。我们enhance
使用TemplatingEngine
. 这工作得很好,但是当移动到应用程序的另一部分(不重新加载页面)时,我们还需要拆除那些增强的片段(删除事件侦听器,...)。
我的想法是将 aurelia 实例保留在页面中并重用它。
目前我增强这样的片段:
function enhanceFragment(targetElement) {
function proceed() {
let aurelia = window.DFAurelia;
let engine = aurelia.container.get(TemplatingEngine);
engine.enhance({
container: aurelia.container,
element: targetElement,
resources: aurelia.resources
});
}
if (!window.DFAurelia) {
bootstrap(async aurelia => {
aurelia.use
.defaultBindingLanguage()
.defaultResources()
.eventAggregator()
.developmentLogging()
.globalResources('app/df-element');
await aurelia.start();
window.DFAurelia = aurelia;
proceed();
});
} else {
proceed();
}
}
我增强的 HTML 如下所示:
<df-element></df-element>
我在自定义元素本身的函数中尝试了这个(DfElement::removeMyself()
):
let vs: ViewSlot = this.container.get(ViewSlot);
let view: View = this.container.get(View);
vs.remove(view);
vs.detached();
vs.unbind();
但是从容器获取视图时出现错误(无法读取未定义的属性“资源”)。我从点击处理程序中调用了这个函数。
主要问题:如何手动触发 the及其unbind
子项的和detached
钩子?DfElement
额外问题:我的aurelia
实例 ( window.DFAurelia
)root
的属性host
未定义:这是一件坏事吗?您是否发现这种增强(和不增强)页面中片段的方式存在任何潜在问题?