Browse Source

KERNEL-17875 fix: fineui Dep不能回收问题

master
翠屏山最速下山传说 1 month ago
parent
commit
e83a80916c
  1. 15
      packages/fineui/src/fix/fix.compact.js
  2. 10
      packages/fineui/src/fix/fix.js

15
packages/fineui/src/fix/fix.compact.js

@ -76,7 +76,7 @@ function popTarget() {
export const Model = Fix.Model;
const oldWatch = Fix.watch;
Fix.watch = function(model, expOrFn, cb, options) {
Fix.watch = function (model, expOrFn, cb, options) {
if (isPlainObject(cb)) {
options = cb;
cb = cb.handler;
@ -89,7 +89,7 @@ Fix.watch = function(model, expOrFn, cb, options) {
this,
model,
expOrFn,
function() {
function () {
options && options.store && pushTarget(options.store);
let res;
try {
@ -167,7 +167,7 @@ export function createStore() {
}
const _init = Widget.prototype._init;
Widget.prototype._init = function() {
Widget.prototype._init = function () {
const needPop = createStore.call(this);
try {
_init.apply(this, arguments);
@ -178,7 +178,7 @@ Widget.prototype._init = function() {
};
const __initWatch = Widget.prototype.__initWatch;
Widget.prototype.__initWatch = function() {
Widget.prototype.__initWatch = function () {
__initWatch.apply(this, arguments);
const workerMode =
Providers.getProvider("bi.provider.system").getWorkerMode();
@ -191,7 +191,7 @@ Widget.prototype.__initWatch = function() {
};
const unMount = Widget.prototype.__destroy;
Widget.prototype.__destroy = function() {
Widget.prototype.__destroy = function () {
try {
unMount.apply(this, arguments);
} catch (e) {
@ -204,6 +204,7 @@ Widget.prototype.__destroy = function() {
unwatch();
});
});
Fix.cleanupDeps();
this._watchers && (this._watchers = []);
if (this.store) {
this.store._parent && (this.store._parent = null);
@ -213,7 +214,7 @@ Widget.prototype.__destroy = function() {
delete this.__cacheStore;
};
Widget.prototype.__watch = function(getter, handler, options) {
Widget.prototype.__watch = function (getter, handler, options) {
this._watchers = this._watchers || [];
const watcher = new Fix.Watcher(
null,
@ -235,7 +236,7 @@ Widget.prototype.__watch = function(getter, handler, options) {
_.each(["_render", "__afterRender", "_mount", "__afterMount"], (name) => {
const old = Widget.prototype[name];
old &&
(Widget.prototype[name] = function() {
(Widget.prototype[name] = function () {
this.store && pushTarget(this.store);
let res;
try {

10
packages/fineui/src/fix/fix.js

@ -110,7 +110,15 @@ function isExtensible(obj) {
function remove(arr, item) {
if (arr && arr.length) {
if (!arr) {
return;
}
const len = arr.length;
if (len) {
if (item === arr[len - 1]) {
arr.length = len - 1;
return;
}
const index = arr.indexOf(item);
if (index > -1) {
return arr.splice(index, 1);

Loading…
Cancel
Save