我想擴展$ .mobile.changePage來接受更多的選項,比如爲頁面完成加載時添加一個回調函數,以及像contentType這樣的AJAX調用的更多選項。有沒有辦法做到這一點,而無需更改源代碼?如果不是,我願意爲教育目的更改源代碼,但無法在jQuery Mobile GitHub中找到它:https://github.com/jquery/jquery-mobile。感謝您的幫助或指導。
1
A
回答
2
JavaScript中更令人激動的部分之一是能夠使用通常被稱爲Monkey Patching的技術重新定義任何函數。 (順便ES5提供了一種新freeze方法,它允許開發人員能夠防止這樣的修改。)
這裏的一個的JavaScript猴補丁的示例,其允許我們修改函數的行爲,而無需編輯它的源:
// A namespace object.
var Example = {};
// Sums two values.
Example.sum = function (a, b) {
return a + b;
}
// Usage:
var result = Example.sum(1, 2);
假設我們想記錄添加到數總和法,我們可以只添加一個console.log
線的功能,但我們也可以猴子打補丁:
// Store a reference to the current 'Example.sum' function.
var originalSum = Example.sum;
// Now redeclare Example.sum...
Example.sum = function (a, b) {
// Call the originalSum function first...
var result = originalSum(a, b);
// Now add some logging...
console.log("Example.sum(" + a + ", " + b + ") yields " + result);
return result;
};
現在,當Example.sum
是所謂的,不僅我們會像以前一樣得到結果,而且還會寫一個控制檯消息。考慮到這一點,就可以猴子修補$.mobile.changePage
方法以同樣的方式:
var originalChangePage = $.mobile.changePage;
// Redefine `changePage` so it accepts a 'complete' function in the options
// object which will be invoked when the page change is complete.
$.mobile.changePage = function (to, options) {
if (typeof options.complete === "function") {
$(body).one("pagechange", function (event) {
options.complete(event);
});
}
originalChangePage(to, options);
};
相關問題
- 1. 接受多個選項欄
- 2. 我可以通過PHP更改已接受的擴展嗎?
- 3. 如何擴展此正則表達式以接受更多變體?
- 4. Chrome擴展選項
- 5. 鉻擴展選項更改默認popup.html
- 6. 鉻擴展多個選項卡和chrome.runtime.connect
- 7. Chrome擴展 - 打開多個選項卡
- 8. 擴展DropDownList以包含額外選項
- 9. 擴展javascript選項以添加功能
- 10. 擴展jQuery UI對話框(添加更多選項)
- 11. 擴展類不接受擴展類的類型
- 12. 調整jquery插件以接受選項?
- 13. EditorGUILayout Popup在下拉選項更改後不接受更改
- 14. 接受null的擴展方法的可接受名稱
- 15. 瀏覽器今天接受插件還是隻接受擴展?
- 16. 擴展@NotEmpty接受其他類
- 17. 擴展PHP類不接受變量
- 18. 擴展BitMap類。將addChild()接受子類?
- 19. HTTP是否接受擴展獨佔?
- 20. 關閉Chrome擴展選項
- 21. Chrome擴展 - 選項卡數
- 22. Mozilla擴展發佈選項
- 23. JS滑塊擴展/選項
- 24. 擴展JQuery UI選項卡
- 25. 擴展選項w /原因
- 26. 在XSD中擴展選項
- 27. XmlBuilder.processing可以接受更多參數嗎?
- 28. 擴展Django的頁面以接受模板標籤
- 29. 擴展DataList以接受來自LinkButtons的新InsertCommand
- 30. 哪個名字是可以接受的類擴展抽象類?
剛剛成立的僞頁面被委派'pageshow'或類似的事件處理程序,這是已經存在的功能。 – Jasper 2012-08-15 20:31:29