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 { OB } from "./3.ob";
import { Providers, _lazyCreateWidget } from "./5.inject"; import { Providers, _lazyCreateWidget } from "./5.inject";
import { DOM } from "./utils"; import { DOM } from "./utils";
import { Events, emptyFn, pixFormat } from "./constant"; import { Events, pixFormat } from "./constant";
import { Plugin } from "./6.plugin"; import { Plugin } from "./6.plugin";
import { _global } from "./0.foundation"; import { _global } from "./0.foundation";
import { SystemProvider } from "./system"; 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 * @private

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

@ -7,7 +7,7 @@ import {
extend, extend,
isFunction, isFunction,
Widget, Widget,
Providers Providers, emptyFn
} from "@/core"; } from "@/core";
import { Fix } from "./fix"; import { Fix } from "./fix";
@ -76,7 +76,7 @@ function popTarget() {
export const Model = Fix.Model; export const Model = Fix.Model;
const oldWatch = Fix.watch; const oldWatch = Fix.watch;
Fix.watch = function (model, expOrFn, cb, options) { Fix.watch = function(model, expOrFn, cb, options) {
if (isPlainObject(cb)) { if (isPlainObject(cb)) {
options = cb; options = cb;
cb = cb.handler; cb = cb.handler;
@ -89,7 +89,7 @@ Fix.watch = function (model, expOrFn, cb, options) {
this, this,
model, model,
expOrFn, expOrFn,
function () { function() {
options && options.store && pushTarget(options.store); options && options.store && pushTarget(options.store);
let res; let res;
try { try {
@ -142,9 +142,9 @@ export function createStore() {
if (this._store || this.options._store) { if (this._store || this.options._store) {
const store = Widget.findStore( const store = Widget.findStore(
this.options.context || this.options.context ||
this._parent || this._parent ||
this.options.element || this.options.element ||
this._context this._context
); );
if (store) { if (store) {
pushTarget(store); pushTarget(store);
@ -167,7 +167,7 @@ export function createStore() {
} }
const _init = Widget.prototype._init; const _init = Widget.prototype._init;
Widget.prototype._init = function () { Widget.prototype._init = function() {
const needPop = createStore.call(this); const needPop = createStore.call(this);
try { try {
_init.apply(this, arguments); _init.apply(this, arguments);
@ -178,7 +178,7 @@ Widget.prototype._init = function () {
}; };
const __initWatch = Widget.prototype.__initWatch; const __initWatch = Widget.prototype.__initWatch;
Widget.prototype.__initWatch = function () { Widget.prototype.__initWatch = function() {
__initWatch.apply(this, arguments); __initWatch.apply(this, arguments);
const workerMode = const workerMode =
Providers.getProvider("bi.provider.system").getWorkerMode(); Providers.getProvider("bi.provider.system").getWorkerMode();
@ -191,7 +191,7 @@ Widget.prototype.__initWatch = function () {
}; };
const unMount = Widget.prototype.__destroy; const unMount = Widget.prototype.__destroy;
Widget.prototype.__destroy = function () { Widget.prototype.__destroy = function() {
try { try {
unMount.apply(this, arguments); unMount.apply(this, arguments);
} catch (e) { } catch (e) {
@ -213,19 +213,38 @@ Widget.prototype.__destroy = function () {
delete this.__cacheStore; 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) => { _.each(["_render", "__afterRender", "_mount", "__afterMount"], (name) => {
const old = Widget.prototype[name]; const old = Widget.prototype[name];
old && old &&
(Widget.prototype[name] = function () { (Widget.prototype[name] = function() {
this.store && pushTarget(this.store); this.store && pushTarget(this.store);
let res; let res;
try { try {
res = old.apply(this, arguments); res = old.apply(this, arguments);
} catch (e) { } catch (e) {
console.error(e); console.error(e);
} }
this.store && popTarget(); this.store && popTarget();
return res; return res;
}); });
}); });

Loading…
Cancel
Save