2011-06-15 57 views
4

我已經在代碼中看到過這兩種方法,但我想知道使用dlg.hide()或dlg關閉對話框的首選和更有效的方法是什麼。 destroyRecursive()?何時隱藏()dijit.Dialog與dojo中的.destroyRecursive()

+0

如果您打算再次打開該對話框,然後隱藏它。如果你不這樣做(這是一次性的對話?),那麼破壞它將釋放一些內存。雖然不多。 – 2011-06-16 10:02:24

回答

3

這取決於您是否要重複使用對話框。如果重新創建它更便宜(您定義了更便宜的),請使用destroyRecursive()。否則,只需創建一次,只需要hide()就可以隨時關閉它。

請記住dijit將保留您在註冊表中創建的所有小部件。因此,簡單地讓對話變量超出範圍不會使其變得垃圾收集,並且這會導致內存泄漏的可能性。

2

我發現我不能完全銷燬對話框內的小部件,如果我只是調用dialog.destroyRecursive(),雖然對話框看起來被破壞了。

取而代之,我必須撥打dialog.hide(),然後在onHide方法中調用this.destroyRecursive()

但是,這會導致另一個無害的錯誤「exception in animation handler for: onEnd」。 但它確實讓對話框中的所有小部件都被破壞了。