Browse Source

context重构

master
guy 4 years ago
parent
commit
5a17741692
  1. 44
      dist/fix/fix.compact.ie.js
  2. 52
      dist/fix/fix.compact.js
  3. 3
      src/core/shortcut.js
  4. 35
      src/core/widget.js

44
dist/fix/fix.compact.ie.js vendored

@ -36,18 +36,6 @@
Fix.Model.target = target = targetStack.pop(); Fix.Model.target = target = targetStack.pop();
} }
var context = null;
var contextStack = [];
function pushContext(_context) {
if (context) contextStack.push(context);
Fix.Model.context = context = _context;
}
function popContext() {
Fix.Model.context = context = contextStack.pop();
}
var oldWatch = Fix.watch; var oldWatch = Fix.watch;
Fix.watch = function (model, expOrFn, cb, options) { Fix.watch = function (model, expOrFn, cb, options) {
if (BI.isPlainObject(cb)) { if (BI.isPlainObject(cb)) {
@ -86,20 +74,20 @@
} }
} }
var _create = BI.createWidget; // var _create = BI.createWidget;
BI.createWidget = function (item, options, context) { // BI.createWidget = function (item, options, context) {
var pushed = false; // var pushed = false;
if (BI.isWidget(options)) { // if (BI.isWidget(options)) {
pushContext(options); // pushContext(options);
pushed = true; // pushed = true;
} else if (context != null) { // } else if (context != null) {
pushContext(context); // pushContext(context);
pushed = true; // pushed = true;
} // }
var result = _create.apply(this, arguments); // var result = _create.apply(this, arguments);
pushed && popContext(); // pushed && popContext();
return result; // return result;
}; // };
BI.watch = function (watch, handler) { BI.watch = function (watch, handler) {
if (BI.Widget.current) { if (BI.Widget.current) {
@ -124,9 +112,9 @@
_.each(["populate", "addItems", "prependItems"], function (name) { _.each(["populate", "addItems", "prependItems"], function (name) {
var old = BI.Loader.prototype[name]; var old = BI.Loader.prototype[name];
BI.Loader.prototype[name] = function () { BI.Loader.prototype[name] = function () {
pushContext(this); BI.Widget.pushContext(this);
var result = old.apply(this, arguments); var result = old.apply(this, arguments);
popContext(); BI.Widget.popContext();
return result; return result;
}; };
}); });

52
dist/fix/fix.compact.js vendored

@ -36,18 +36,6 @@
Fix.Model.target = target = targetStack.pop(); Fix.Model.target = target = targetStack.pop();
} }
var context = null;
var contextStack = [];
function pushContext (_context) {
if (context) contextStack.push(context);
Fix.Model.context = context = _context;
}
function popContext () {
Fix.Model.context = context = contextStack.pop();
}
var oldWatch = Fix.watch; var oldWatch = Fix.watch;
Fix.watch = function (model, expOrFn, cb, options) { Fix.watch = function (model, expOrFn, cb, options) {
if (BI.isPlainObject(cb)) { if (BI.isPlainObject(cb)) {
@ -90,25 +78,25 @@
} }
} }
var _create = BI.createWidget; // var _create = BI.createWidget;
BI.createWidget = function (item, options, context) { // BI.createWidget = function (item, options, context) {
var pushed = false; // var pushed = false;
if (BI.isWidget(options)) { // if (BI.isWidget(options)) {
pushContext(options); // pushContext(options);
pushed = true; // pushed = true;
} else if (context != null) { // } else if (context != null) {
pushContext(context); // pushContext(context);
pushed = true; // pushed = true;
}
var result = _create.apply(this, arguments);
// try {
// var result = _create.apply(this, arguments);
// } catch (e) {
// console.error(e);
// } // }
pushed && popContext(); // var result = _create.apply(this, arguments);
return result; // // try {
}; // // var result = _create.apply(this, arguments);
// // } catch (e) {
// // console.error(e);
// // }
// pushed && popContext();
// return result;
// };
BI.watch = function (watch, handler) { BI.watch = function (watch, handler) {
if (BI.Widget.current) { if (BI.Widget.current) {
@ -133,13 +121,13 @@
_.each(["populate", "addItems", "prependItems"], function (name) { _.each(["populate", "addItems", "prependItems"], function (name) {
var old = BI.Loader.prototype[name]; var old = BI.Loader.prototype[name];
BI.Loader.prototype[name] = function () { BI.Loader.prototype[name] = function () {
pushContext(this); BI.Widget.pushContext(this);
try { try {
var result = old.apply(this, arguments); var result = old.apply(this, arguments);
} catch (e) { } catch (e) {
console.error(e); console.error(e);
} }
popContext(); BI.Widget.popContext();
return result; return result;
}; };
}); });

3
src/core/shortcut.js

@ -19,12 +19,13 @@
} }
var widget = new cls(); var widget = new cls();
BI.Widget.pushContext(widget);
widget._initProps(config); widget._initProps(config);
widget._initRoot(); widget._initRoot();
if (!lazy || config.element || config.root) { if (!lazy || config.element || config.root) {
widget._lazyConstructor(); widget._lazyConstructor();
} }
BI.Widget.popContext();
return widget; return widget;
}; };

35
src/core/widget.js

@ -506,36 +506,45 @@
this.purgeListeners(); this.purgeListeners();
} }
}); });
var context = null; var context = null, current = null;
var contextStack = []; var contextStack = [], currentStack = [];
function pushTarget (_context) { BI.Widget.pushContext = function (_context) {
if (context) contextStack.push(context); if (context) contextStack.push(context);
BI.Widget.current = context = _context; BI.Widget.context = context = _context;
};
BI.Widget.popContext = function () {
BI.Widget.context = context = contextStack.pop();
};
function pushTarget (_current) {
if (current) currentStack.push(current);
BI.Widget.current = current = _current;
} }
function popTarget () { function popTarget () {
BI.Widget.current = context = contextStack.pop(); BI.Widget.current = current = currentStack.pop();
} }
BI.onBeforeMount = function (beforeMount) { BI.onBeforeMount = function (beforeMount) {
if (context) { if (current) {
context.beforeMount = beforeMount; current.beforeMount = beforeMount;
} }
}; };
BI.onMounted = function (mounted) { BI.onMounted = function (mounted) {
if (context) { if (current) {
context.mounted = mounted; current.mounted = mounted;
} }
}; };
BI.onBeforeUnmount = function (beforeDestroy) { BI.onBeforeUnmount = function (beforeDestroy) {
if (context) { if (current) {
context.beforeDestroy = beforeDestroy; current.beforeDestroy = beforeDestroy;
} }
}; };
BI.onUnmounted = function (destroyed) { BI.onUnmounted = function (destroyed) {
if (context) { if (current) {
context.destroyed = destroyed; current.destroyed = destroyed;
} }
}; };

Loading…
Cancel
Save