我想擴展$ .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. 擴展DropDownList以包含額外選項
- 4. EditorGUILayout Popup在下拉選項更改後不接受更改
- 5. 瀏覽器今天接受插件還是隻接受擴展?
- 6. 接受null的擴展方法的可接受名稱
- 7. 擴展PHP類不接受變量
- 8. 擴展@NotEmpty接受其他類
- 9. 擴展BitMap類。將addChild()接受子類?
- 10. HTTP是否接受擴展獨佔?
- 11. 擴展JQuery UI選項卡
- 12. 在XSD中擴展選項
- 13. 擴展選項w /原因
- 14. Chrome擴展 - 選項卡數
- 15. XmlBuilder.processing可以接受更多參數嗎?
- 16. 哪個名字是可以接受的類擴展抽象類?
- 17. 擴展Django的頁面以接受模板標籤
- 18. 擴展DataList以接受來自LinkButtons的新InsertCommand
- 19. DialogResult篩選多個擴展
- 20. Eshell sudo不接受選項
- 21. 如何直接鏈接到擴展的常見問題選項
- 22. 動態擴展選擇選項背景
- 23. 給予用戶選項以選擇擴展權限
- 24. Primefaces圖表+ jqplot擴展器 - 在擴展與jqplot選項y軸
- 25. Chrome擴展程序 - 修改Google日曆事件UI以通過輸入字段接受擴展屬性
- 26. 從Chrome新選項卡擴展名接收postMessage
- 27. clBuild選項,傳遞OpenCL擴展
- 28. 將Highcharts選項作爲插件擴展
- 29. 沒有/默認選項水銀擴展
- 30. 在Chrome擴展選項中驗證Jquery
剛剛成立的僞頁面被委派'pageshow'或類似的事件處理程序,這是已經存在的功能。 – Jasper 2012-08-15 20:31:29