|
|
@ -1,12 +1,12 @@ |
|
|
|
/** |
|
|
|
/** |
|
|
|
* Widget超类 |
|
|
|
* Widget超类 |
|
|
|
* @class BI.Widget |
|
|
|
* @class Widget |
|
|
|
* @extends BI.OB |
|
|
|
* @extends OB |
|
|
|
* |
|
|
|
* |
|
|
|
* @cfg {JSON} options 配置属性 |
|
|
|
* @cfg {JSON} options 配置属性 |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
|
|
import BI from "./2.base"; |
|
|
|
import { isFunction, isArray, each, extend, isPlainObject, isNull, uniqueId, isWidget, isWidthOrHeight, isKey, remove, any, isNotNull } from "./2.base"; |
|
|
|
import OB from "./3.ob"; |
|
|
|
import OB from "./3.ob"; |
|
|
|
|
|
|
|
|
|
|
|
const cancelAnimationFrame = |
|
|
|
const cancelAnimationFrame = |
|
|
@ -23,20 +23,20 @@ function callLifeHook(self, life) { |
|
|
|
let hooks = [], hook; |
|
|
|
let hooks = [], hook; |
|
|
|
hook = self[life]; |
|
|
|
hook = self[life]; |
|
|
|
if (hook) { |
|
|
|
if (hook) { |
|
|
|
hooks = hooks.concat(BI.isArray(hook) ? hook : [hook]); |
|
|
|
hooks = hooks.concat(isArray(hook) ? hook : [hook]); |
|
|
|
} |
|
|
|
} |
|
|
|
hook = self.options[life]; |
|
|
|
hook = self.options[life]; |
|
|
|
if (hook) { |
|
|
|
if (hook) { |
|
|
|
hooks = hooks.concat(BI.isArray(hook) ? hook : [hook]); |
|
|
|
hooks = hooks.concat(isArray(hook) ? hook : [hook]); |
|
|
|
} |
|
|
|
} |
|
|
|
BI.each(hooks, function (i, hook) { |
|
|
|
each(hooks, function (i, hook) { |
|
|
|
hook.call(self); |
|
|
|
hook.call(self); |
|
|
|
}); |
|
|
|
}); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
export default class Widget extends OB { |
|
|
|
export default class Widget extends OB { |
|
|
|
_defaultConfig () { |
|
|
|
_defaultConfig () { |
|
|
|
return BI.extend(super._defaultConfig(), { |
|
|
|
return extend(super._defaultConfig(), { |
|
|
|
root: false, |
|
|
|
root: false, |
|
|
|
tagName: "div", |
|
|
|
tagName: "div", |
|
|
|
attributes: null, |
|
|
|
attributes: null, |
|
|
@ -67,9 +67,9 @@ export default class Widget extends OB { |
|
|
|
if (this.setup) { |
|
|
|
if (this.setup) { |
|
|
|
pushTarget(this); |
|
|
|
pushTarget(this); |
|
|
|
const delegate = this.setup(this.options); |
|
|
|
const delegate = this.setup(this.options); |
|
|
|
if (BI.isPlainObject(delegate)) { |
|
|
|
if (isPlainObject(delegate)) { |
|
|
|
// 如果setup返回一个json,即对外暴露的方法
|
|
|
|
// 如果setup返回一个json,即对外暴露的方法
|
|
|
|
BI.extend(this, delegate); |
|
|
|
extend(this, delegate); |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
this.render = delegate; |
|
|
|
this.render = delegate; |
|
|
|
} |
|
|
|
} |
|
|
@ -208,7 +208,7 @@ export default class Widget extends OB { |
|
|
|
this.element.addClass((o._baseCls || "") + " " + (o.baseCls || "") + " " + (o.extraCls || "")); |
|
|
|
this.element.addClass((o._baseCls || "") + " " + (o.baseCls || "") + " " + (o.extraCls || "")); |
|
|
|
} |
|
|
|
} |
|
|
|
if (o.cls) { |
|
|
|
if (o.cls) { |
|
|
|
if (BI.isFunction(o.cls)) { |
|
|
|
if (isFunction(o.cls)) { |
|
|
|
const cls = this.__watch(o.cls, (context, newValue) => { |
|
|
|
const cls = this.__watch(o.cls, (context, newValue) => { |
|
|
|
this.element.removeClass(cls).addClass(cls = newValue); |
|
|
|
this.element.removeClass(cls).addClass(cls = newValue); |
|
|
|
}); |
|
|
|
}); |
|
|
@ -227,10 +227,10 @@ export default class Widget extends OB { |
|
|
|
this.element.data(o.data); |
|
|
|
this.element.data(o.data); |
|
|
|
} |
|
|
|
} |
|
|
|
if (o.css) { |
|
|
|
if (o.css) { |
|
|
|
if (BI.isFunction(o.css)) { |
|
|
|
if (isFunction(o.css)) { |
|
|
|
const css = this.__watch(o.css, (context, newValue) => { |
|
|
|
const css = this.__watch(o.css, (context, newValue) => { |
|
|
|
for (const k in css) { |
|
|
|
for (const k in css) { |
|
|
|
if (BI.isNull(newValue[k])) { |
|
|
|
if (isNull(newValue[k])) { |
|
|
|
newValue[k] = ""; |
|
|
|
newValue[k] = ""; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@ -250,7 +250,7 @@ export default class Widget extends OB { |
|
|
|
return getter.call(this, this); |
|
|
|
return getter.call(this, this); |
|
|
|
}, (handler && ((v) => { |
|
|
|
}, (handler && ((v) => { |
|
|
|
handler.call(this, this, v); |
|
|
|
handler.call(this, this, v); |
|
|
|
})) || BI.emptyFn, BI.extend({ deep: true }, options)); |
|
|
|
})) || BI.emptyFn, extend({ deep: true }, options)); |
|
|
|
this._watchers.push(() => { |
|
|
|
this._watchers.push(() => { |
|
|
|
watcher.teardown(); |
|
|
|
watcher.teardown(); |
|
|
|
}); |
|
|
|
}); |
|
|
@ -266,18 +266,18 @@ export default class Widget extends OB { |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
_initRoot() { |
|
|
|
_initRoot() { |
|
|
|
const o = this.options; |
|
|
|
const o = this.options; |
|
|
|
this.widgetName = o.widgetName || BI.uniqueId("widget"); |
|
|
|
this.widgetName = o.widgetName || uniqueId("widget"); |
|
|
|
this._isRoot = o.root; |
|
|
|
this._isRoot = o.root; |
|
|
|
this._children = {}; |
|
|
|
this._children = {}; |
|
|
|
if (BI.isWidget(o.element)) { |
|
|
|
if (isWidget(o.element)) { |
|
|
|
this.element = this.options.element.element; |
|
|
|
this.element = this.options.element.element; |
|
|
|
this._parent = o.element; |
|
|
|
this._parent = o.element; |
|
|
|
this._parent._children && this._parent.addWidget(this.widgetName, this); |
|
|
|
this._parent._children && this._parent.addWidget(this.widgetName, this); |
|
|
|
} else if (o.element) { |
|
|
|
} else if (o.element) { |
|
|
|
this.element = BI.Widget._renderEngine.createElement(this); |
|
|
|
this.element = Widget._renderEngine.createElement(this); |
|
|
|
this._isRoot = true; |
|
|
|
this._isRoot = true; |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
this.element = BI.Widget._renderEngine.createElement(this); |
|
|
|
this.element = Widget._renderEngine.createElement(this); |
|
|
|
} |
|
|
|
} |
|
|
|
this.element._isWidget = true; |
|
|
|
this.element._isWidget = true; |
|
|
|
// const widgets = this.element.data("__widgets") || [];
|
|
|
|
// const widgets = this.element.data("__widgets") || [];
|
|
|
@ -288,14 +288,14 @@ export default class Widget extends OB { |
|
|
|
|
|
|
|
|
|
|
|
_initElementWidth() { |
|
|
|
_initElementWidth() { |
|
|
|
const o = this.options; |
|
|
|
const o = this.options; |
|
|
|
if (BI.isWidthOrHeight(o.width)) { |
|
|
|
if (isWidthOrHeight(o.width)) { |
|
|
|
this.element.css("width", BI.pixFormat(o.width)); |
|
|
|
this.element.css("width", BI.pixFormat(o.width)); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
_initElementHeight() { |
|
|
|
_initElementHeight() { |
|
|
|
const o = this.options; |
|
|
|
const o = this.options; |
|
|
|
if (BI.isWidthOrHeight(o.height)) { |
|
|
|
if (isWidthOrHeight(o.height)) { |
|
|
|
this.element.css("height", BI.pixFormat(o.height)); |
|
|
|
this.element.css("height", BI.pixFormat(o.height)); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@ -303,7 +303,7 @@ export default class Widget extends OB { |
|
|
|
_initVisual() { |
|
|
|
_initVisual() { |
|
|
|
const o = this.options; |
|
|
|
const o = this.options; |
|
|
|
if (o.invisible) { |
|
|
|
if (o.invisible) { |
|
|
|
const invisible = o.invisible = BI.isFunction(o.invisible) ? this.__watch(o.invisible, (context, newValue) => { |
|
|
|
const invisible = o.invisible = isFunction(o.invisible) ? this.__watch(o.invisible, (context, newValue) => { |
|
|
|
this.setVisible(!newValue); |
|
|
|
this.setVisible(!newValue); |
|
|
|
}) : o.invisible; |
|
|
|
}) : o.invisible; |
|
|
|
if (invisible) { |
|
|
|
if (invisible) { |
|
|
@ -317,7 +317,7 @@ export default class Widget extends OB { |
|
|
|
const o = this.options; |
|
|
|
const o = this.options; |
|
|
|
if (o.disabled || o.invalid) { |
|
|
|
if (o.disabled || o.invalid) { |
|
|
|
if (this.options.disabled) { |
|
|
|
if (this.options.disabled) { |
|
|
|
const disabled = o.disabled = BI.isFunction(o.disabled) ? this.__watch(o.disabled, (context, newValue) => { |
|
|
|
const disabled = o.disabled = isFunction(o.disabled) ? this.__watch(o.disabled, (context, newValue) => { |
|
|
|
this.setEnable(!newValue); |
|
|
|
this.setEnable(!newValue); |
|
|
|
}) : o.disabled; |
|
|
|
}) : o.disabled; |
|
|
|
if (disabled) { |
|
|
|
if (disabled) { |
|
|
@ -325,7 +325,7 @@ export default class Widget extends OB { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
if (this.options.invalid) { |
|
|
|
if (this.options.invalid) { |
|
|
|
const invalid = o.invalid = BI.isFunction(o.invalid) ? this.__watch(o.invalid, (context, newValue) => { |
|
|
|
const invalid = o.invalid = isFunction(o.invalid) ? this.__watch(o.invalid, (context, newValue) => { |
|
|
|
this.setValid(!newValue); |
|
|
|
this.setValid(!newValue); |
|
|
|
}) : o.invalid; |
|
|
|
}) : o.invalid; |
|
|
|
if (invalid) { |
|
|
|
if (invalid) { |
|
|
@ -334,9 +334,9 @@ export default class Widget extends OB { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
if (o.effect) { |
|
|
|
if (o.effect) { |
|
|
|
if (BI.isArray(o.effect)) { |
|
|
|
if (isArray(o.effect)) { |
|
|
|
if (BI.isArray(o.effect[0])) { |
|
|
|
if (isArray(o.effect[0])) { |
|
|
|
BI.each(o.effect, (i, effect) => { |
|
|
|
each(o.effect, (i, effect) => { |
|
|
|
this.__watch(effect[0], effect[1]); |
|
|
|
this.__watch(effect[0], effect[1]); |
|
|
|
}); |
|
|
|
}); |
|
|
|
} else { |
|
|
|
} else { |
|
|
@ -361,16 +361,16 @@ export default class Widget extends OB { |
|
|
|
this.__isMounting = true; |
|
|
|
this.__isMounting = true; |
|
|
|
// 当开启worker模式时,可以通过$render来实现另一种效果
|
|
|
|
// 当开启worker模式时,可以通过$render来实现另一种效果
|
|
|
|
const workerMode = BI.Providers.getProvider("bi.provider.system").getWorkerMode(); |
|
|
|
const workerMode = BI.Providers.getProvider("bi.provider.system").getWorkerMode(); |
|
|
|
const render = BI.isFunction(this.options.render) ? this.options.render : (workerMode ? (this.$render || this.render) : this.render); |
|
|
|
const render = isFunction(this.options.render) ? this.options.render : (workerMode ? (this.$render || this.render) : this.render); |
|
|
|
let els = render && render.call(this); |
|
|
|
let els = render && render.call(this); |
|
|
|
els = this.options.configRender ? this.options.configRender.call(this, els) : els; |
|
|
|
els = this.options.configRender ? this.options.configRender.call(this, els) : els; |
|
|
|
els = BI.Plugin.getRender(this.options.type, els); |
|
|
|
els = BI.Plugin.getRender(this.options.type, els); |
|
|
|
if (BI.isPlainObject(els)) { |
|
|
|
if (isPlainObject(els)) { |
|
|
|
els = [els]; |
|
|
|
els = [els]; |
|
|
|
} |
|
|
|
} |
|
|
|
this.__initWatch(); |
|
|
|
this.__initWatch(); |
|
|
|
if (BI.isArray(els)) { |
|
|
|
if (isArray(els)) { |
|
|
|
BI.each(els, (i, el) => { |
|
|
|
each(els, (i, el) => { |
|
|
|
if (el) { |
|
|
|
if (el) { |
|
|
|
BI._lazyCreateWidget(el, { |
|
|
|
BI._lazyCreateWidget(el, { |
|
|
|
element: this |
|
|
|
element: this |
|
|
@ -475,7 +475,7 @@ export default class Widget extends OB { |
|
|
|
this.options._disabled = true; |
|
|
|
this.options._disabled = true; |
|
|
|
} |
|
|
|
} |
|
|
|
// 递归将所有子组件使能
|
|
|
|
// 递归将所有子组件使能
|
|
|
|
BI.each(this._children, function (i, child) { |
|
|
|
each(this._children, function (i, child) { |
|
|
|
!child._manualSetEnable && child._setEnable && child._setEnable(enable); |
|
|
|
!child._manualSetEnable && child._setEnable && child._setEnable(enable); |
|
|
|
}); |
|
|
|
}); |
|
|
|
} |
|
|
|
} |
|
|
@ -487,7 +487,7 @@ export default class Widget extends OB { |
|
|
|
this.options._invalid = true; |
|
|
|
this.options._invalid = true; |
|
|
|
} |
|
|
|
} |
|
|
|
// 递归将所有子组件使有效
|
|
|
|
// 递归将所有子组件使有效
|
|
|
|
BI.each(this._children, function (i, child) { |
|
|
|
each(this._children, function (i, child) { |
|
|
|
!child._manualSetValid && child._setValid && child._setValid(valid); |
|
|
|
!child._manualSetValid && child._setValid && child._setValid(valid); |
|
|
|
}); |
|
|
|
}); |
|
|
|
} |
|
|
|
} |
|
|
@ -581,7 +581,7 @@ export default class Widget extends OB { |
|
|
|
doBehavior() { |
|
|
|
doBehavior() { |
|
|
|
const args = arguments; |
|
|
|
const args = arguments; |
|
|
|
// 递归将所有子组件使有效
|
|
|
|
// 递归将所有子组件使有效
|
|
|
|
BI.each(this._children, function (i, child) { |
|
|
|
each(this._children, function (i, child) { |
|
|
|
child.doBehavior && child.doBehavior.apply(child, args); |
|
|
|
child.doBehavior && child.doBehavior.apply(child, args); |
|
|
|
}); |
|
|
|
}); |
|
|
|
} |
|
|
|
} |
|
|
@ -596,32 +596,32 @@ export default class Widget extends OB { |
|
|
|
|
|
|
|
|
|
|
|
addWidget(name, widget) { |
|
|
|
addWidget(name, widget) { |
|
|
|
const self = this; |
|
|
|
const self = this; |
|
|
|
if (name instanceof BI.Widget) { |
|
|
|
if (name instanceof Widget) { |
|
|
|
widget = name; |
|
|
|
widget = name; |
|
|
|
name = widget.getName(); |
|
|
|
name = widget.getName(); |
|
|
|
} |
|
|
|
} |
|
|
|
if (BI.isKey(name)) { |
|
|
|
if (isKey(name)) { |
|
|
|
name = name + ""; |
|
|
|
name = name + ""; |
|
|
|
} |
|
|
|
} |
|
|
|
name = name || widget.getName() || BI.uniqueId("widget"); |
|
|
|
name = name || widget.getName() || uniqueId("widget"); |
|
|
|
if (this._children[name]) { |
|
|
|
if (this._children[name]) { |
|
|
|
throw new Error("组件:组件名已存在,不能进行添加"); |
|
|
|
throw new Error("组件:组件名已存在,不能进行添加"); |
|
|
|
} |
|
|
|
} |
|
|
|
widget._setParent && widget._setParent(this); |
|
|
|
widget._setParent && widget._setParent(this); |
|
|
|
widget.on(BI.Events.DESTROY, function () { |
|
|
|
widget.on(BI.Events.DESTROY, function () { |
|
|
|
// TODO: self待删
|
|
|
|
// TODO: self待删
|
|
|
|
BI.remove(self._children, this); |
|
|
|
remove(self._children, this); |
|
|
|
}); |
|
|
|
}); |
|
|
|
return (this._children[name] = widget); |
|
|
|
return (this._children[name] = widget); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
getWidgetByName(name) { |
|
|
|
getWidgetByName(name) { |
|
|
|
if (!BI.isKey(name) || name === this.getName()) { |
|
|
|
if (!isKey(name) || name === this.getName()) { |
|
|
|
return this; |
|
|
|
return this; |
|
|
|
} |
|
|
|
} |
|
|
|
name = name + ""; |
|
|
|
name = name + ""; |
|
|
|
let widget = void 0, other = {}; |
|
|
|
let widget = void 0, other = {}; |
|
|
|
BI.any(this._children, function (i, wi) { |
|
|
|
any(this._children, function (i, wi) { |
|
|
|
if (i === name) { |
|
|
|
if (i === name) { |
|
|
|
widget = wi; |
|
|
|
widget = wi; |
|
|
|
return true; |
|
|
|
return true; |
|
|
@ -629,7 +629,7 @@ export default class Widget extends OB { |
|
|
|
other[i] = wi; |
|
|
|
other[i] = wi; |
|
|
|
}); |
|
|
|
}); |
|
|
|
if (!widget) { |
|
|
|
if (!widget) { |
|
|
|
BI.any(other, function (i, wi) { |
|
|
|
any(other, function (i, wi) { |
|
|
|
return (widget = wi.getWidgetByName(i)); |
|
|
|
return (widget = wi.getWidgetByName(i)); |
|
|
|
}); |
|
|
|
}); |
|
|
|
} |
|
|
|
} |
|
|
@ -637,8 +637,8 @@ export default class Widget extends OB { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
removeWidget(nameOrWidget) { |
|
|
|
removeWidget(nameOrWidget) { |
|
|
|
if (BI.isWidget(nameOrWidget)) { |
|
|
|
if (isWidget(nameOrWidget)) { |
|
|
|
BI.remove(this._children, nameOrWidget); |
|
|
|
remove(this._children, nameOrWidget); |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
delete this._children[nameOrWidget]; |
|
|
|
delete this._children[nameOrWidget]; |
|
|
|
} |
|
|
|
} |
|
|
@ -661,11 +661,11 @@ export default class Widget extends OB { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
attr(key, value) { |
|
|
|
attr(key, value) { |
|
|
|
if (BI.isPlainObject(key)) { |
|
|
|
if (isPlainObject(key)) { |
|
|
|
BI.each(key, (k, v) => this.attr(k, v)); |
|
|
|
each(key, (k, v) => this.attr(k, v)); |
|
|
|
return; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
if (BI.isNotNull(value)) { |
|
|
|
if (isNotNull(value)) { |
|
|
|
return this.options[key] = value; |
|
|
|
return this.options[key] = value; |
|
|
|
} |
|
|
|
} |
|
|
|
return this.options[key]; |
|
|
|
return this.options[key]; |
|
|
@ -728,7 +728,7 @@ export default class Widget extends OB { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
__d() { |
|
|
|
__d() { |
|
|
|
BI.each(this._children, function (i, widget) { |
|
|
|
each(this._children, function (i, widget) { |
|
|
|
widget && widget._unMount && widget._unMount(); |
|
|
|
widget && widget._unMount && widget._unMount(); |
|
|
|
}); |
|
|
|
}); |
|
|
|
this._children = {}; |
|
|
|
this._children = {}; |
|
|
@ -766,7 +766,7 @@ export default class Widget extends OB { |
|
|
|
|
|
|
|
|
|
|
|
_empty () { |
|
|
|
_empty () { |
|
|
|
this._assetMounted(); |
|
|
|
this._assetMounted(); |
|
|
|
BI.each(this._children, function (i, widget) { |
|
|
|
each(this._children, function (i, widget) { |
|
|
|
widget && widget._unMount && widget._unMount(); |
|
|
|
widget && widget._unMount && widget._unMount(); |
|
|
|
}); |
|
|
|
}); |
|
|
|
this._children = {}; |
|
|
|
this._children = {}; |
|
|
@ -800,9 +800,9 @@ export default class Widget extends OB { |
|
|
|
// this.purgeListeners();
|
|
|
|
// this.purgeListeners();
|
|
|
|
|
|
|
|
|
|
|
|
// 去掉组件绑定的watcher
|
|
|
|
// 去掉组件绑定的watcher
|
|
|
|
BI.each(this._watchers, function (i, unwatches) { |
|
|
|
each(this._watchers, function (i, unwatches) { |
|
|
|
unwatches = BI.isArray(unwatches) ? unwatches : [unwatches]; |
|
|
|
unwatches = isArray(unwatches) ? unwatches : [unwatches]; |
|
|
|
BI.each(unwatches, function (j, unwatch) { |
|
|
|
each(unwatches, function (j, unwatch) { |
|
|
|
unwatch(); |
|
|
|
unwatch(); |
|
|
|
}); |
|
|
|
}); |
|
|
|
}); |
|
|
|
}); |
|
|
@ -840,39 +840,39 @@ export default class Widget extends OB { |
|
|
|
} |
|
|
|
} |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
BI.extend(BI, { Widget }); |
|
|
|
extend(BI, { Widget }); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let context = null, current = null; |
|
|
|
let context = null, current = null; |
|
|
|
const contextStack = [], currentStack = []; |
|
|
|
const contextStack = [], currentStack = []; |
|
|
|
|
|
|
|
|
|
|
|
BI.Widget.pushContext = function (_context) { |
|
|
|
Widget.pushContext = function (_context) { |
|
|
|
if (context) contextStack.push(context); |
|
|
|
if (context) contextStack.push(context); |
|
|
|
BI.Widget.context = context = _context; |
|
|
|
Widget.context = context = _context; |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
BI.Widget.popContext = function () { |
|
|
|
Widget.popContext = function () { |
|
|
|
BI.Widget.context = context = contextStack.pop(); |
|
|
|
Widget.context = context = contextStack.pop(); |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
BI.Widget.execWithContext = function (context, execFunc) { |
|
|
|
Widget.execWithContext = function (context, execFunc) { |
|
|
|
BI.Widget.pushContext(context); |
|
|
|
Widget.pushContext(context); |
|
|
|
try { |
|
|
|
try { |
|
|
|
execFunc(); |
|
|
|
execFunc(); |
|
|
|
} catch (e) { |
|
|
|
} catch (e) { |
|
|
|
throw e; |
|
|
|
throw e; |
|
|
|
} finally { |
|
|
|
} finally { |
|
|
|
BI.Widget.popContext(); |
|
|
|
Widget.popContext(); |
|
|
|
} |
|
|
|
} |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
function pushTarget(_current) { |
|
|
|
function pushTarget(_current) { |
|
|
|
if (current) currentStack.push(current); |
|
|
|
if (current) currentStack.push(current); |
|
|
|
BI.Widget.current = current = _current; |
|
|
|
Widget.current = current = _current; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
function popTarget() { |
|
|
|
function popTarget() { |
|
|
|
BI.Widget.current = current = currentStack.pop(); |
|
|
|
Widget.current = current = currentStack.pop(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
BI.useStore = function (_store) { |
|
|
|
BI.useStore = function (_store) { |
|
|
@ -903,7 +903,7 @@ BI.useStore = function (_store) { |
|
|
|
} |
|
|
|
} |
|
|
|
current._store = function () { |
|
|
|
current._store = function () { |
|
|
|
const st = (_store || currentStore).apply(this, arguments); |
|
|
|
const st = (_store || currentStore).apply(this, arguments); |
|
|
|
BI.extend(delegate, st); |
|
|
|
extend(delegate, st); |
|
|
|
return st; |
|
|
|
return st; |
|
|
|
}; |
|
|
|
}; |
|
|
|
return current.$storeDelegate = delegate; |
|
|
|
return current.$storeDelegate = delegate; |
|
|
@ -912,7 +912,7 @@ BI.useStore = function (_store) { |
|
|
|
|
|
|
|
|
|
|
|
BI.useContext = function (inject) { |
|
|
|
BI.useContext = function (inject) { |
|
|
|
// 通过组件找最近的store
|
|
|
|
// 通过组件找最近的store
|
|
|
|
const vm = BI.Widget.findStore(BI.Widget.current || BI.Widget.context); |
|
|
|
const vm = Widget.findStore(Widget.current || Widget.context); |
|
|
|
if (vm) { |
|
|
|
if (vm) { |
|
|
|
if (inject) { |
|
|
|
if (inject) { |
|
|
|
if (vm.$$computed && inject in vm.$$computed) { |
|
|
|
if (vm.$$computed && inject in vm.$$computed) { |
|
|
@ -938,17 +938,17 @@ BI.useContext = function (inject) { |
|
|
|
|
|
|
|
|
|
|
|
BI.watch = function (vm, watch, handler) { |
|
|
|
BI.watch = function (vm, watch, handler) { |
|
|
|
// 必须要保证组件当前环境存在
|
|
|
|
// 必须要保证组件当前环境存在
|
|
|
|
if (BI.Widget.current) { |
|
|
|
if (Widget.current) { |
|
|
|
if (vm instanceof BI.Model) { |
|
|
|
if (vm instanceof BI.Model) { |
|
|
|
const watchers = []; |
|
|
|
const watchers = []; |
|
|
|
if (BI.isKey(watch)) { |
|
|
|
if (isKey(watch)) { |
|
|
|
const k = watch; |
|
|
|
const k = watch; |
|
|
|
watch = {}; |
|
|
|
watch = {}; |
|
|
|
watch[k] = handler; |
|
|
|
watch[k] = handler; |
|
|
|
} |
|
|
|
} |
|
|
|
for (const key in watch) { |
|
|
|
for (const key in watch) { |
|
|
|
const innerHandler = watch[key]; |
|
|
|
const innerHandler = watch[key]; |
|
|
|
if (BI.isArray(handler)) { |
|
|
|
if (isArray(handler)) { |
|
|
|
for (let i = 0; i < handler.length; i++) { |
|
|
|
for (let i = 0; i < handler.length; i++) { |
|
|
|
watchers.push(Fix.watch(vm.model, key, innerHandler, { |
|
|
|
watchers.push(Fix.watch(vm.model, key, innerHandler, { |
|
|
|
store: vm |
|
|
|
store: vm |
|
|
@ -961,14 +961,14 @@ BI.watch = function (vm, watch, handler) { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
// vm中一定有_widget
|
|
|
|
// vm中一定有_widget
|
|
|
|
BI.Widget.current._watchers || (BI.Widget.current._watchers = []); |
|
|
|
Widget.current._watchers || (Widget.current._watchers = []); |
|
|
|
BI.Widget.current._watchers = BI.Widget.current._watchers.concat(watchers); |
|
|
|
Widget.current._watchers = Widget.current._watchers.concat(watchers); |
|
|
|
return; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
handler = watch; |
|
|
|
handler = watch; |
|
|
|
watch = vm; |
|
|
|
watch = vm; |
|
|
|
BI.Widget.current.$watchDelayCallbacks || (BI.Widget.current.$watchDelayCallbacks = []); |
|
|
|
Widget.current.$watchDelayCallbacks || (Widget.current.$watchDelayCallbacks = []); |
|
|
|
BI.Widget.current.$watchDelayCallbacks.push([watch, handler]); |
|
|
|
Widget.current.$watchDelayCallbacks.push([watch, handler]); |
|
|
|
} |
|
|
|
} |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
@ -980,7 +980,7 @@ BI.onBeforeMount = function (beforeMount) { |
|
|
|
} |
|
|
|
} |
|
|
|
if (!current.beforeMount) { |
|
|
|
if (!current.beforeMount) { |
|
|
|
current.beforeMount = []; |
|
|
|
current.beforeMount = []; |
|
|
|
} else if (!BI.isArray(current.beforeMount)) { |
|
|
|
} else if (!isArray(current.beforeMount)) { |
|
|
|
current.beforeMount = [current.beforeMount]; |
|
|
|
current.beforeMount = [current.beforeMount]; |
|
|
|
} |
|
|
|
} |
|
|
|
current.beforeMount.push(beforeMount); |
|
|
|
current.beforeMount.push(beforeMount); |
|
|
@ -994,7 +994,7 @@ BI.onMounted = function (mounted) { |
|
|
|
} |
|
|
|
} |
|
|
|
if (!current.mounted) { |
|
|
|
if (!current.mounted) { |
|
|
|
current.mounted = []; |
|
|
|
current.mounted = []; |
|
|
|
} else if (!BI.isArray(current.mounted)) { |
|
|
|
} else if (!isArray(current.mounted)) { |
|
|
|
current.mounted = [current.mounted]; |
|
|
|
current.mounted = [current.mounted]; |
|
|
|
} |
|
|
|
} |
|
|
|
current.mounted.push(mounted); |
|
|
|
current.mounted.push(mounted); |
|
|
@ -1004,7 +1004,7 @@ BI.onBeforeUnmount = function (beforeDestroy) { |
|
|
|
if (current) { |
|
|
|
if (current) { |
|
|
|
if (!current.beforeDestroy) { |
|
|
|
if (!current.beforeDestroy) { |
|
|
|
current.beforeDestroy = []; |
|
|
|
current.beforeDestroy = []; |
|
|
|
} else if (!BI.isArray(current.beforeDestroy)) { |
|
|
|
} else if (!isArray(current.beforeDestroy)) { |
|
|
|
current.beforeDestroy = [current.beforeDestroy]; |
|
|
|
current.beforeDestroy = [current.beforeDestroy]; |
|
|
|
} |
|
|
|
} |
|
|
|
current.beforeDestroy.push(beforeDestroy); |
|
|
|
current.beforeDestroy.push(beforeDestroy); |
|
|
@ -1014,19 +1014,19 @@ BI.onUnmounted = function (destroyed) { |
|
|
|
if (current) { |
|
|
|
if (current) { |
|
|
|
if (!current.destroyed) { |
|
|
|
if (!current.destroyed) { |
|
|
|
current.destroyed = []; |
|
|
|
current.destroyed = []; |
|
|
|
} else if (!BI.isArray(current.destroyed)) { |
|
|
|
} else if (!isArray(current.destroyed)) { |
|
|
|
current.destroyed = [current.destroyed]; |
|
|
|
current.destroyed = [current.destroyed]; |
|
|
|
} |
|
|
|
} |
|
|
|
current.destroyed.push(destroyed); |
|
|
|
current.destroyed.push(destroyed); |
|
|
|
} |
|
|
|
} |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
BI.Widget.registerRenderEngine = function (engine) { |
|
|
|
Widget.registerRenderEngine = function (engine) { |
|
|
|
BI.Widget._renderEngine = engine; |
|
|
|
Widget._renderEngine = engine; |
|
|
|
}; |
|
|
|
}; |
|
|
|
BI.Widget.registerRenderEngine({ |
|
|
|
Widget.registerRenderEngine({ |
|
|
|
createElement: function (widget) { |
|
|
|
createElement: function (widget) { |
|
|
|
if (BI.isWidget(widget)) { |
|
|
|
if (isWidget(widget)) { |
|
|
|
const o = widget.options; |
|
|
|
const o = widget.options; |
|
|
|
if (o.element) { |
|
|
|
if (o.element) { |
|
|
|
return BI.$(o.element); |
|
|
|
return BI.$(o.element); |
|
|
@ -1048,7 +1048,7 @@ BI.mount = function (widget, container, predicate, hydrate) { |
|
|
|
// 将widget的element元素都挂载好,并建立相互关系
|
|
|
|
// 将widget的element元素都挂载好,并建立相互关系
|
|
|
|
widget.element.data("__widgets", [widget]); |
|
|
|
widget.element.data("__widgets", [widget]); |
|
|
|
const res = widget._mount(true, false, false, function (w) { |
|
|
|
const res = widget._mount(true, false, false, function (w) { |
|
|
|
BI.each(w._children, function (i, child) { |
|
|
|
each(w._children, function (i, child) { |
|
|
|
const ws = child.element.data("__widgets"); |
|
|
|
const ws = child.element.data("__widgets"); |
|
|
|
if (!ws) { |
|
|
|
if (!ws) { |
|
|
|
ws = []; |
|
|
|
ws = []; |
|
|
@ -1059,13 +1059,13 @@ BI.mount = function (widget, container, predicate, hydrate) { |
|
|
|
predicate && predicate.apply(this, arguments); |
|
|
|
predicate && predicate.apply(this, arguments); |
|
|
|
}); |
|
|
|
}); |
|
|
|
// 将新的dom树属性(事件等)patch到已存在的dom上
|
|
|
|
// 将新的dom树属性(事件等)patch到已存在的dom上
|
|
|
|
const c = BI.Widget._renderEngine.createElement; |
|
|
|
const c = Widget._renderEngine.createElement; |
|
|
|
BI.DOM.patchProps(widget.element, c(c(container).children()[0])); |
|
|
|
BI.DOM.patchProps(widget.element, c(c(container).children()[0])); |
|
|
|
|
|
|
|
|
|
|
|
const triggerLifeHook = function (w) { |
|
|
|
const triggerLifeHook = function (w) { |
|
|
|
w.beforeMount && w.beforeMount(); |
|
|
|
w.beforeMount && w.beforeMount(); |
|
|
|
w.mounted && w.mounted(); |
|
|
|
w.mounted && w.mounted(); |
|
|
|
BI.each(w._children, function (i, child) { |
|
|
|
each(w._children, function (i, child) { |
|
|
|
triggerLifeHook(child); |
|
|
|
triggerLifeHook(child); |
|
|
|
}); |
|
|
|
}); |
|
|
|
}; |
|
|
|
}; |
|
|
@ -1074,7 +1074,7 @@ BI.mount = function (widget, container, predicate, hydrate) { |
|
|
|
return res; |
|
|
|
return res; |
|
|
|
} |
|
|
|
} |
|
|
|
if (container) { |
|
|
|
if (container) { |
|
|
|
BI.Widget._renderEngine.createElement(container).append(widget.element); |
|
|
|
Widget._renderEngine.createElement(container).append(widget.element); |
|
|
|
} |
|
|
|
} |
|
|
|
return widget._mount(true, false, false, predicate); |
|
|
|
return widget._mount(true, false, false, predicate); |
|
|
|
}; |
|
|
|
}; |
|
|
|