كيف يمكنني معرفة ما إذا كان معين مسج UI وظيفة متاحة واستخدام وظيفة مختلفة لو لم يكن ؟
-
28-09-2019 - |
سؤال
أنا أكتب البرنامج المساعد مسج و أود قانون بلدي الاستفادة من واجهة المستخدم مسج 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 معين.