[英]Problems with jQuery internals, fn.bind/fn.apply on draggables (trying to do better exception handling)
我一直在嘗試包裝javascript try / catch,如http://pastebin.com/f579d999d所示
它運作良好,基本上將所有內容包裝在try / catch中,讓您捕獲如下錯誤:
$.handleErrors(function(e){
console.log("an error occurred");
console.log(e);
});
(然后我將其發布到服務器)
但是,這不適用於可拖動對象或可調整大小的對象(但適用於所有其他內容)。 如果您開始拖動/調整元素的大小,則它不會在鼠標向上移動時停止(永遠拖動)
似乎ofn.apply()在可拖動/可調整大小上不起作用。
具體來說(縮短):
ofn = fn; wfn = function() { ofn.apply(this, arguments); }; fn = wfn;
但對於所有其他事件。
代碼塊):
$.fn.bind = function(type, data, fn) { var ofn, wfn; if (!fn && data && $.isFunction(data)) { fn = data; data = undefined; } if (fn && type.indexOf("error") === -1) { ofn = fn; wfn = function() { try { ofn.apply(this, arguments); } catch(e) { handler(e); return false; } }; fn = wfn; } return jbind.call(this, type, data, fn);
我在這里幾乎迷失了,我找不到任何資源說明為什么這不起作用(我什至找不到任何遇到相同問題的人)
所以我的問題是:
此致,尼古拉斯
更新2011-08-28,完整代碼(有效)現在為:
jQuery.fn.bind = function( type, data, fn ) {
if ( !fn && data && typeof data == 'function' ) {
fn = data;
data = null;
}
if ( fn )
{
var origFn = fn;
var wrappedFn = jQuery.proxy(origFn, function () {
try {
origFn.apply( this, arguments );
}catch ( ex ) {
return trackError( ex );
}
});
fn = wrappedFn;
}
return jQueryBind.call( this, type, data, fn );
};
如果有人有更多改進技巧(原始功能來自http://blogs.cozi.com/tech/2008/04/javascript-error-tracking-why-windowonerror-is-not-enough.html )請在評論中讓我知道。
回復:1-我們做同樣的事情,而且看起來效果很好。
回復:2-是的。 發生的情況是,包裝原始功能后,jQuery UI無法解除綁定“ mousemove.draggable”。 解決方法是添加以下行(改編自jQuery的proxy函數):
// Set the guid of unique handler to the same of original handler, so it can be removed
wfn.guid = ofn.guid = ofn.guid || wfn.guid || jQuery.guid++;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.