كيف يمكنني معرفة ما إذا كان معين مسج UI وظيفة متاحة واستخدام وظيفة مختلفة لو لم يكن ؟

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

سؤال

أنا أكتب البرنامج المساعد مسج و أود قانون بلدي الاستفادة من واجهة المستخدم مسج show(effect, [options], [speed], [callback]) و hide(effect, [options], [speed], [callback]) الوظائف التي تسمح لك لإظهار و إخفاء العناصر مع الرسوم المتحركة لطيف.

ومع ذلك أود بلدي المساعد أن تتحلل برشاقة إذا مسج واجهة المستخدم غير متوفر, التبديل إلى استخدام الأساسية غير موحية show() و hide() وظائف موجودة في مسج القياسية API.

سوف تحتاج إلى اختبار إظهار أو إخفاء المهام على وجه التحديد ، حتى لو مسج UI هو متوفر أنه من المحتمل أن تكون نسخة مخصصة من دون آثار العناصر المدرجة.

في البداية اعتقدت أنني قد تكون قادرة على أن تفعل شيئا مثل:

if(typeof myelement.show('blind', 'slow') == 'undefined')
{
    myelement.show('blind', 'slow');
}
else
{
    myelement.show();
}

ولكن بالطبع هذا لا يعمل, حتى إذا كان المستخدم ليس الوقت الحاضر ، show() لا تزال وظيفة لديه توقيع المختلفة—حتى typeof يعود object في أي من الحالتين.

إذن ما هي أفضل طريقة للتحقق مما إذا كان مسج واجهة المستخدم هو متاح إلى البرنامج المساعد ؟ أي مساعدة هي محل تقدير كبير!

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

المحلول

يمكنك التحقق من تأثير مثل هذا:

function hasEffect(effect) {
    return $.effects && $.effects[effect];
}

ثم يمكنك استخدام ذلك في أي مكان:

if(hasEffect('blind')) {
  myelement.show('blind', 'slow');
} else {
  myElement.show();
}
//or, you can shorten it further:
//$.fn.show.apply(myelement, hasEffect('blind') ? ['blind','slow'] : []);​

يمكنك عرض تجريبي هنا, الاختيار/إلغاء واجهة المستخدم مسج على اليسار و انقر فوق "تشغيل" في الأعلى لترى أنه في العمل.يعمل هذا لأن الآثار يعلن مثل هذا:

$.effects.blind = function(o) { ...effecty stuff... };

على سبيل المثال, يمكنك أن ترى "أعمى" هنا.سبب الاختيار على حد سواء $.effects و $.effects.effect في الكود أعلاه يمكنك فقط تحميل بعض من آثار عند تحميل واجهة المستخدم مسج, لذا هذه الحسابات على هذا الاحتمال.

نصائح أخرى

عمل نيك عملت تماما. من أجل الاتساق ، انتهى بي الأمر إلى إضافته كدالة أداة jQuery من داخل رمز البرنامج المساعد الخاص بي:

$.extend({
    hasEffect: function (effect) {
        return $.effects && $.effects[effect];
    }
});

حتى الآن يمكنني الاتصال $.hasEffect(effectname) في أي مكان أريد التحقق من وجود تأثير jQuery UI معين.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top