【发布时间】:2017-01-16 14:24:42
【问题描述】:
我正在开发一个现有的 SPA,我们逐步将组件替换为 Aurelia 组件。我们使用TemplatingEngine 的enhance API。这工作得很好,但我们还需要在移动到应用程序的另一部分(不重新加载页面)时拆除那些增强的片段(删除事件侦听器,...)。
我的想法是将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();
但从容器获取视图时出现错误(无法读取未定义的属性“资源”)。我从点击处理程序中调用了这个函数。
主要问题:如何手动触发DfElement 及其子级的unbind 和detached 钩子?
额外问题:我的 aurelia 实例 (window.DFAurelia) root 和 host 的属性未定义:这是一件坏事吗?您认为这种增强(和不增强)页面片段的方式有什么潜在的问题吗?
【问题讨论】:
标签: aurelia aurelia-templating