endance.js مكتبات onScripted تشغيل قبل تحميل jQuery
-
30-09-2019 - |
سؤال
نرى هذا العرض التوضيحي من مجموعة الخيوط باستخدام تعزيزها التدريجي endance.js مكتبة
التعديل لإعطاء:-
<script type="text/javascript" src="../_shared/EnhanceJS/enhance.js"></script>
<script type="text/javascript">
// Run capabilities test
enhance({
loadScripts: [
{src: 'js/excanvas.js', iecondition: 'all'},
'../_shared/jquery.min.js',
'js/visualize.jQuery.js',
'js/example.js'
],
loadStyles: [
'css/visualize.css',
'css/visualize-dark.css'
]
});
alert($);
</script>
أحصل على "خطأ غير محدد" على التنبيه يفترض أن jQuery لم يتم تحميله بعد.
ملاحظة - التنبيه ($) مخصص فقط للتصحيح - أحاول أن أفعل شيئًا مع ذلك على سبيل المثال ("بعض المخطط") - وليس $ (معالج) أو $ (وثيقة). READY وما إلى ذلك لا تعمل أيضًا - لم يتم تحميل jQuery ، لم يتم تعريف $.
تعزيز onscripted يبدو أنه يجب أن يفعل خدعة ولكن إذا أضفت في
onScriptsLoaded:[runMyCode()]
و لاحقا
function runMyCode()
{
alert("runMyCode was called");
alert($);
}
أول تنبيه يعمل ولكن $ لا يزال غير محدد.
إذا اتصلت بـ RunMyCode على حدث انقر فوق زر ، فهو يعمل.
لذا فإن السؤال هو - كيف يمكنك تشغيل الرمز بمجرد انتهاء جميع البرامج النصية مع endance.js؟
PS نفس المشكلة التي تم التحقق منها في IE8/FF3/Chrome7
المحلول
أعتقد أن هذا هو ما تتبعه ، لاحظ ذلك onScriptsLoaded
يتم استخدامه مباشرة كرسالة رد الاتصال, ، لذلك يجب أن تكون وظيفة ، وليس صفيف:
enhance({
loadScripts: [
{src: 'js/excanvas.js', iecondition: 'all'},
'../_shared/jquery.min.js',
'js/visualize.jQuery.js',
'js/example.js'
],
loadStyles: [
'css/visualize.css',
'css/visualize-dark.css'
],
onScriptsLoaded: function() { alert($); }
});
أو بشكل عام لوظيفة ما ، تمرير مرجع مثل هذا:
onScriptsLoaded: runMyCode
السبب onScriptsLoaded:[runMyCode()]
"نوع من" الأعمال هو في الحال استدعاء runMyCode
الوظيفة (في الوقت الذي يعمل فيه هذا الخط ، ليس عندما تنتهي البرامج النصية) وتصنع صفيفًا من تلك النتيجة. هذا سوف يرمي خطأ في الواقع عندما تنتهي البرامج النصية ، منذ ذلك الحين onScriptsLoaded
من المتوقع أن تكون وظيفة رد الاتصال ، وليس صفيف.
نصائح أخرى
أعتقد أن هذه قد تكون مشكلة:
onScriptsLoaded:[runMyCode()]
هل حاولت (على افتراض أن تدوين الصفيف صحيح): (تعديل - هو ليس صحيح)
onScriptsLoaded: [runMyCode]
؟ الطريقة الأولى ، أنت تتصل بوظيفتك في الوقت الذي تقوم فيه بإعداد المكتبة. تريد تمرير المرجع فقط إلى وظيفتك بدلاً من ذلك.
تعديل في الواقع يجب أن يكون فقط:
onScriptsLoaded: runMyCode
لا أعرف من أين جاء الصفيف ؛ بالتأكيد لم يتم ذكره في وثائق "endance.js".