我正在致力於現有的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
的屬性未定義:這是壞事嗎?你有沒有看到這種在頁面中增強(和不增強)片段的潛在問題?
我不使用''這個元素,所以第二個選項適用於我。謝謝! –
將'this.view = null;'作爲'removeMyself'的最後一行是否很重要? –
對於垃圾收集器? –