Beispiel #1
0
        _disposable: function (o, name) {
            lib.assert(o != null); // 常见的错误
            var area = inner(this).cptDisposableArea;

            // o为 null 或 undefined 时什么也不做,这是为了支持编码的简洁
            if (o == null) {
                return o;
            }
            // 全部dispose
            else if (o === false) {
                for (var n in area) {
                    if (area.hasOwnProperty(n)) {
                        disposeDisposable.call(this, area[n]);
                        area[n] = null;
                    }
                }
            }
            // 指定名称进行dispose
            else if ($.type(o) === 'string') {
                disposeDisposable.call(this, area[o]);
                area[o] = null;
            }
            // 注册可以被dispose的对象
            else {
                lib.assert($.isFunction(o.dispose) || lib.isJQuery(o), 'No dispose method nor not jQuery!');
                name = name || '\x0E\x0E-component-anonymouse-disposable' + lib.localUID();
                area[name] = o;
            }

            return o;
        },
Beispiel #2
0
 // 递归dispose component
 function traverseSub(o, callback, elOrCpt) {
     if (
         (!elOrCpt && lib.isComponent(o))
         || (elOrCpt && lib.isJQuery(o))
     ) {
         callback(o);
     }
     else if ($.type(o) === 'object' && !lib.isAtom(o)) {
         for (var i in o) {
             if (o.hasOwnProperty(i)
                 // 当subcpt移除时会设为null。虽然如果编码错误也可能导致为null,
                 // 但这两种情况不好区分,所以暂时不fail fast了。
                 && o[i] != null
             ) {
                 traverseSub(o[i], callback, elOrCpt);
             }
         }
     }
 }
Beispiel #3
0
 function disposeDisposable(o) {
     // o 为含有 dispose方法 的对象 或 jQuery
     // jQuery时意为清除本名空间的事件
     if (o && $.isFunction(o.dispose)) {
         try {
             o.dispose();
         }
         catch (ex) {
             if (Component.debug) {
                 throw ex;
             }
             // 线上为了减少用户影响,吞食dispose的ex。
             else if (Component.printLog) {
                 Component.printLog.error(ex);
             }
         }
     }
     else if (o && lib.isJQuery(o)) {
         o.off(this._event());
     }
 }