diff --git a/src/core/ob.js b/src/core/ob.js index 7c7d68ddf..4cf532c5a 100644 --- a/src/core/ob.js +++ b/src/core/ob.js @@ -29,23 +29,31 @@ * @abstract */ BI.OB = function (config) { - var props = this.props; - if (BI.isFunction(this.props)) { - props = this.props(config); - } - this.options = extend(this._defaultConfig(config), props, config); - this._init(); - this._initRef(); + this._constructor(config); }; _.extend(BI.OB.prototype, { props: {}, init: null, destroyed: null, + _constructor: function (config) { + this._initProps(config); + this._init(); + this._initRef(); + }, + _defaultConfig: function (config) { return {}; }, + _initProps: function (config) { + var props = this.props; + if (BI.isFunction(this.props)) { + props = this.props(config); + } + this.options = extend(this._defaultConfig(config), props, config); + }, + _init: function () { this._initListeners(); this.init && this.init(); diff --git a/src/core/shortcut.js b/src/core/shortcut.js index 53d6ae165..4e7df4ea7 100644 --- a/src/core/shortcut.js +++ b/src/core/shortcut.js @@ -9,12 +9,15 @@ // 根据配置属性生成widget var createWidget = function (config) { - if (config["classType"]) { - return new (new Function("return " + config["classType"] + ";")())(config); - } - var cls = kv[config.type]; - return new cls(config); + + var widget = new cls(); + + widget._initProps(config); + widget._init(); + widget._initRef(); + + return widget; }; BI.createWidget = function (item, options, context) { diff --git a/src/core/widget.js b/src/core/widget.js index f6add3ff0..eae1276e1 100644 --- a/src/core/widget.js +++ b/src/core/widget.js @@ -25,6 +25,9 @@ }); }, + // 覆盖父类的_constructor方法,widget不走ob的生命周期 + _constructor: function () {}, + beforeInit: null, // 生命周期函数