何時應該銷燬?它是否會被YUI生命週期自動調用?頁面卸載是否會導致YUI生命週期在頁面處理期間創建的所有對象上調用destroy?我一直在假設我需要自己完成所有的調用來銷燬,但是當ajax調用代替逐漸增強的代碼段時,這會變得非常棘手。例如:何時致電YUI銷燬?
<div id="replaceMe">
<table>
<tr>
<td>1</td>
</tr>
<tr>
<td>2</td>
</tr>
</table>
<script>
YUI().use('my-lib', function(Y) {
Y.mypackage.enhanceTable("replaceMe");
});
<script>
</div>
的my-lib
模塊基本上是增加點擊處理程序和鼠標懸停的每一行:
YUI.add('my-lib', function(Y) {
function EnhancedTable(config) {
EnhancedTable.superclass.constructor.apply(this, arguments);
}
EnhancedTable.NAME = "enhanced-table";
EnhancedTable.ATTRS = {
containerId : {},
onClickHandler : {},
onMouseoverHandler : {},
onMouseoutHandler : {}
};
Y.extend(EnhancedTable, Y.Base, {
_click : function(e) {
//... submit action
},
destructor : function() {
var onClickHandler = this.get("onClickHandler"),
onMouseoverHandler = this.get("onMouseoverHandler"),
onMouseoutHandler = this.get("onMouseoutHandler");
onClickHandler && onClickHandler.detach();
onMouseoverHandler && onMouseoverHandler.detach();
onMouseoutHandler && onMouseoutHandler.detach();
},
initializer : function(config) {
var container = Y.one("[id=" + this.get("containerId") + "]");
this.set("container", container);
this.set("onMouseoverHandler", container.delegate("mouseover",
this._mouseover, "tr", this));
this.set("onMouseoutHandler", container.delegate("mouseout",
this._mouseout, "tr", this));
this.set("onClickHandler", container.delegate("click",
this._click, "tr", this));
},
_mouseout : function(e) {
e.currentTarget.removeClass("indicated");
},
_mouseover : function(e) {
e.currentTarget.addClass("indicated");
}
});
Y.namespace("mypackage");
Y.mypackage.enhanceTable = function(containerId) {
var enhancedTable new EnhancedTable({containerId:containerId});
};
}, '0.0.1', {
requires : [ 'base', 'node' ]
});
單擊處理程序將提交一個請求到我的應用程序將改變頁面。我是否需要記住所有增強的表格對象,並且有一個onunload
處理程序調用每個的destroy方法?或者YUI框架是否照顧到了這一點?
這個問題的最後一部分是,我也有代碼之外的代碼,通過替換<div id="replaceMe">
的內容替換整個表。在此過程中,腳本將重新運行並用新的EnhancedTable
增加新的<table>
。我是否需要記住舊桌子,並在新桌子破壞之前銷燬它?