gpt4 book ai didi

javascript - 如何 Hook 库函数(Golden Layout)并调用其他方法

转载 作者:行者123 更新时间:2023-11-30 20:39:30 25 4
gpt4 key购买 nike

我正在使用一个名为 Golden Layout 的库,它有一个名为 destroy 的函数,它将在窗口关闭或刷新时关闭所有应用程序窗口

我需要为 destroy 函数添加额外的方法。我还需要删除所有本地存储。

我该怎么做?请帮忙

下面是插件代码。

lm.LayoutManager = function( config, container ) {
....
destroy: function() {
if( this.isInitialised === false ) {
return;
}
this._onUnload();
$( window ).off( 'resize', this._resizeFunction );
$( window ).off( 'unload beforeunload', this._unloadFunction );
this.root.callDownwards( '_$destroy', [], true );
this.root.contentItems = [];
this.tabDropPlaceholder.remove();
this.dropTargetIndicator.destroy();
this.transitionIndicator.destroy();
this.eventHub.destroy();

this._dragSources.forEach( function( dragSource ) {
dragSource._dragListener.destroy();
dragSource._element = null;
dragSource._itemConfig = null;
dragSource._dragListener = null;
} );
this._dragSources = [];
},

我可以像这样访问组件中的 destroy 方法

this.layout = new GoldenLayout(this.config, this.layoutElement.nativeElement);

this.layout.destroy();`

我的代码

@HostListener('window:beforeunload', ['$event'])
beforeunloadHandler(event) {
var originalDestroy = this.layout.destroy;
this.layout.destroy = function() {
// Call the original
originalDestroy.apply(this, arguments);
localStorage.clear();
};
}

最佳答案

查看the documentation , GoldenLayout 提供了一个 itemDestroyed 事件,您可以 Hook 它来进行自定义清理。描述是:

Fired whenever an item gets destroyed.

如果由于某种原因你不能,一般的答案是你可以很容易地包装函数:

var originalDestroy = this.layout.destroy;
this.layout.destroy = function() {
// Call the original
originalDestroy.apply(this, arguments);
// Do your additional work here
};

如有必要,您可以通过修改 GoldenLayout.prototype 对所有实例执行此操作:

var originalDestroy = GoldenLayout.prototype.destroy;
GoldenLayout.prototype.destroy = function() {
// Call the original
originalDestroy.apply(this, arguments);
// Do your additional work here
};

例子:

// Stand-in for golden laout
function GoldenLayout() {
}
GoldenLayout.prototype.destroy = function() {
console.log("Standard functionality");
};

// Your override:
var originalDestroy = GoldenLayout.prototype.destroy;
GoldenLayout.prototype.destroy = function() {
// Call the original
originalDestroy.apply(this, arguments);
// Do your additional work here
console.log("Custom functionality");
};

// Use
var layout = new GoldenLayout();
layout.destroy();

关于javascript - 如何 Hook 库函数(Golden Layout)并调用其他方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49446126/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com