سؤال

نرى هذا العرض التوضيحي من مجموعة الخيوط باستخدام تعزيزها التدريجي 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".

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