مشاكل مع مسج الداخلية, fn.ربط/الجبهة الوطنية.تنطبق على draggables (تحاول أن تفعل أفضل التعامل مع استثناء)

StackOverflow https://stackoverflow.com/questions/4245279

سؤال

أنا كنت أحاول أن التفاف جافا سكريبت حاول/catch كما رأينا على http://pastebin.com/f579d999d

أنه يعمل بشكل جيد ، فإنه في الأساس التفاف كل شيء في محاولة/الصيد مما يتيح لك التقاط الأخطاء مثل هذا:

$.handleErrors(function(e){
    console.log("an error occurred");
    console.log(e);
});

(ثم سأقوم بعد ذلك إلى الخادم)

إلا أن هذا لا يعمل من أجل draggables أو resizables (ولكن كل شيء آخر).إذا كنت تبدأ في سحب/تغيير حجم عنصر ، الأمر لا يتوقف على الماوس حتى (صنع السحب إلى الأبد)

يبدو كما لو أن أوفن.تطبيق() لا يعمل على قابل للسحب/يمكن تغيير حجم.

على وجه التحديد (مختصرة):

          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. هل الطريقة المذكورة أعلاه يبدو وكأنه وسيلة موافق للقبض الأخطاء مع مسج
  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) واسمحوا لي أن نعرف في التعليقات.

هل كانت مفيدة؟

المحلول

Re:1 - نحن نفعل نفس الشيء ، ويبدو أن تعمل بشكل جيد جدا.

Re:2 - نعم.ما يحدث هو مسج واجهة المستخدم ليست قادرة على توثيق "mousemove.قابل للسحب" بمجرد التفاف الدالة الأصلية.الإصلاح هو إضافة خط تحت (مقتبس من مسج الوكيل وظيفة):

// 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 مع الإسناد
لا تنتمي إلى StackOverflow
scroll top