2013-04-15 56 views
1

jQuery UI實現銷燬方法。我不明白,使用$ .noop調用this_.destroy()在方法開始的目的:

destroy: function() { 
    this._destroy(); 
    //other code here... 
    {...} 
}, 
_destroy: $.noop, 

有人能解釋一下嗎?

+1

我認爲是對於舊版本的jQuery用戶界面的控件編寫的向後兼容性。 –

+0

$ .noop會以哪種方式兼容? –

+0

$ .noop是一個無所作爲的佔位符函數。 '.noop = function(){};'。如果它沒有被分配給$ .noop,那麼當_destroy調用它時它會失敗,除非它有一個定義在它上面的函數。 $ .noop比'function(){}'短得多,並且被縮小得更好。 –

回答

2

在jQuery的1.9,加入了_destroy方法,這樣的小部件沒有調用基destroy方法。 http://bugs.jqueryui.com/ticket/5056

由於該方法是可選的,它是由定義爲$.noop默認情況下,它被定義爲

$.noop = function(){}; 
+1

寫爲「no-option」或「nothing to operate」= noop! –

+0

Thx,那就是我一直在尋找的! –

1

$.noop只是一個佔位符函數。在javelin.js(Facebook的JavaScript庫)中,它被稱爲「控股袋」。有各種各樣的用途,有時候明確地傳遞一個什麼都不做而不是不傳遞任何東西的函數會更有意義。

想想我的這個例子的意圖。

$.ajax({ 
    url: 'something.asmx', 
    success: $.noop, 
    error: $.noop, 
    complete: $.noop 
}); 

顯然,這僅有的一點是將數據發送到服務器,並忽略所有可能出現的情況。將此與以下內容進行比較,意圖不明確。

$.ajax({ 
    url: 'something.asmx' 
}); 
// future developer thinks, "hey, should this require some callback? 
+0

好的一個ajax請求,但在哪種方式,這可能是有用的插件銷燬方法沒有請求/參數傳遞? –

+0

在jQueryUI的情況下,對銷燬方法使用'$ .noop'意味着有意不存在(還),並且不僅僅是偶然丟失。這也可能是因爲界面需要具有銷燬方法,但是這個特定的小部件不會,因此傳遞一個空函數來滿足基本的界面要求。 –

+0

Thx Brad將輸入 –