Browse Source

Pull request #3642: 无JIRA fix调用相关的先放在compact里面,不然会循环引用

Merge in VISUAL/fineui from ~DAILER/fineui:master to master

* commit '67d98c3b7c6a0e8f96ac125bf13ec33797d798d6':
  无JIRA fix调用相关的先放在compact里面,不然会循环引用
research/test
Dailer-刘荣歆 1 year ago
parent
commit
4b979987eb
  1. 25
      packages/fineui/src/core/4.widget.js
  2. 59
      packages/fineui/src/fix/fix.compact.js

25
packages/fineui/src/core/4.widget.js

@ -25,7 +25,7 @@ import {
import { OB } from "./3.ob";
import { Providers, _lazyCreateWidget } from "./5.inject";
import { DOM } from "./utils";
import { Events, emptyFn, pixFormat } from "./constant";
import { Events, pixFormat } from "./constant";
import { Plugin } from "./6.plugin";
import { _global } from "./0.foundation";
import { SystemProvider } from "./system";
@ -336,29 +336,6 @@ export class Widget extends OB {
}
}
__watch(getter, handler, options) {
if (_global.Fix) {
this._watchers = this._watchers || [];
const watcher = new Fix.Watcher(
null,
() => getter.call(this, this),
(handler &&
((v) => {
handler.call(this, this, v);
})) ||
emptyFn,
extend({ deep: true }, options)
);
this._watchers.push(() => {
watcher.teardown();
});
return watcher.value;
} else {
return getter();
}
}
/**
* 初始化根节点
* @private

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

@ -7,7 +7,7 @@ import {
extend,
isFunction,
Widget,
Providers
Providers, emptyFn
} from "@/core";
import { Fix } from "./fix";
@ -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 {
@ -142,9 +142,9 @@ export function createStore() {
if (this._store || this.options._store) {
const store = Widget.findStore(
this.options.context ||
this._parent ||
this.options.element ||
this._context
this._parent ||
this.options.element ||
this._context
);
if (store) {
pushTarget(store);
@ -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) {
@ -213,19 +213,38 @@ Widget.prototype.__destroy = function () {
delete this.__cacheStore;
};
Widget.prototype.__watch = function(getter, handler, options) {
this._watchers = this._watchers || [];
const watcher = new Fix.Watcher(
null,
() => getter.call(this, this),
(handler &&
((v) => {
handler.call(this, this, v);
})) ||
emptyFn,
extend({ deep: true }, options)
);
this._watchers.push(() => {
watcher.teardown();
});
return watcher.value;
};
_.each(["_render", "__afterRender", "_mount", "__afterMount"], (name) => {
const old = Widget.prototype[name];
old &&
(Widget.prototype[name] = function () {
this.store && pushTarget(this.store);
let res;
try {
res = old.apply(this, arguments);
} catch (e) {
console.error(e);
}
this.store && popTarget();
(Widget.prototype[name] = function() {
this.store && pushTarget(this.store);
let res;
try {
res = old.apply(this, arguments);
} catch (e) {
console.error(e);
}
this.store && popTarget();
return res;
});
return res;
});
});

Loading…
Cancel
Save