2011-03-07 28 views
4

的jQuery UI 1.8加入擴展插件使用這樣的代碼的能力:如何繼承一個部件

$.widget("my.weirdbutton", $.ui.button, { 
}); 

現在,我可以創造一個weirdbutton和它的作品很像一個按鈕:

$("#myButton").weirdbutton(); 

但是,只有怪異的事件纔會被解僱。所以,如果我有類似的東西

$(".button").bind("buttoncreate", function() { 
    console.log("a button was created"); 
}); 

我會想念所有創建怪異按鈕。這可以通過手動觸發怪異按鈕小部件中的按鈕事件來解決。不是很好,但有效。

更大的問題是像這樣的代碼將無法正常工作:

$("#mybutton").weirdbutton(); 
$("#mybutton").button("option", "text", "My New Text"); 

第二行,而不是設置在現有按鈕的選項,創建一個新的。我不知道如何解決這個問題。

那麼,有沒有辦法在Liskov Substitution Principle之後創建一個子類的小部件?

回答

3

我不知道該.bind方法,但用最初_create方法可以使用這種方法來實現:

$.widget("my.weirdbutton", $.ui.button, { 
    _create: function() { 
     $.ui.button.prototype._create.call(this); 
     console.log("a button was created"); 
    } 
}); 

然後,如果你做一個(在文件):

$(function() { 
    $("#myButton").weirdbutton();  
}); 

你應該得到一個console.log

在這裏完整代碼:http://jsbin.com/icota4/11/edit

+0

問題是'console.log'被我的插件的**用戶**調用,而不是我。我不知道他們真的想做什麼(日誌記錄只是一個例子),我不能將它硬編碼到小部件代碼中。 – itsadok

+0

感謝ant1j,我不知道如何調用上級的原創方法! – acme

+1

如果出現這種情況,請不要忘記將問題標記爲「已回答」! – ant1j