簡體   English   中英

jQuery內部問題,fn.bind / fn.apply應用於可拖動對象(試圖做更好的異常處理)

[英]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); 

我在這里幾乎迷失了,我找不到任何資源說明為什么這不起作用(我什至找不到任何遇到相同問題的人)

所以我的問題是:

  1. 上面的方法看起來像是一種使用jQuery捕獲錯誤的好方法
  2. 是否有人遇到過相同的問題(並已解決)
  3. 我是否誤解了一些東西,我不應該在可拖動事件中稱其為

此致,尼古拉斯

更新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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM