qooxdoo destruct,dispose

时间:2012-04-25 13:14:24

标签: javascript qooxdoo

请问任何人请详细说明在qooxdoo 1.6中如何处理和破坏? ,我在qooxdoo演示或文档中找不到任何好的例子。

谢谢你的建议。

3 个答案:

答案 0 :(得分:3)

处置和破坏实际上是同一枚硬币的两面:处置是破坏物体的行为。通过将__destruct()视为onDispose()方法,它们之间的区别可能会变得更加清晰。

根据经验,任何创建QX对象的类都要对其进行适当的破坏。通常,这是在类的析构函数中完成的,但可能会在任何时候发生,具体取决于您的业务逻辑。

通过(例如)

完成处置
this._disposeObjects("_buttonOk", "_buttonCancel");
this._disposeArray("_children");
this._disposeMap("_registry");

呼叫。有些类可能会为它们的破坏提供爆炸方法,如qx.ui.core.Widget

答案 1 :(得分:3)

如果使用object,则不需要实现dispose。只需要破坏,而不是一切(请参阅上文以了解您应该删除哪一个,哪一个不需要)

看起来像这样:

qx.Class.define("q.view.Home"),{
    extend : qx.ui.core.Widget,
    construct:function(){
        this.base(arguments);
    },
    members:{
        __qooxdoo_object:null
    },
    destruct:function(){
        this._disposeObjects("__qooxdoo_object");
    }
});

这很简单。 在内存管理链接上:这非常重要:“qx.disposerDebugLevel”:“2”

它会自动报告(例如在firebug上)没有被正确销毁的对象。

因此,您将能够确切地知道应该删除哪些内容,以及正确删除的内容。

另外,想象一下,你有一个容器(例如Composite或者任何东西)有5个孩子,你想要清空内容而不是容器,你应该这样做:

(根据容器是所有孩子的父元素)

var childrenList = container.removeAll();
for(var i=0; i<childrenList.length; ++i){
  childrenList[i].dispose();
}

如果由于某些原因你只处理了objet,我不知道Widget类(在qooxdoo框架中)有时会引发错误。如果你只删除所有,它将不会处置孩子,但只删除它们。 如果你同时进行(处理和删除所有),你将没有问题,孩子们可以妥善处理。

答案 2 :(得分:1)

也许qooxdoo手册中有关内存管理的文档可能会有所帮助: http://manual.qooxdoo.org/devel/pages/development/memory_management.html