Enhance.js Libraries OnScriptloaded, запущенная перед загрузкой jQuery

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

Вопрос

Видеть это демонстрация от группы филаментов с использованием их прогрессивного улучшения Enhance.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 еще не загружен.

Примечание - оповещение ($) просто для отладки - я пытаюсь что -то сделать с этим, например, $ ('некоторый селектор) - и no $ (обработчик) или $ (документ). Reare и т. Д. jQuery не загружен, $ не определен.

Усиление onscript загружен Похоже, он должен сделать это, но если я добавлю

onScriptsLoaded:[runMyCode()]

и позже

function runMyCode()
{
    alert("runMyCode was called");
    alert($);
}

Первое предупреждение работает, но $ все еще не определен.

Если я вызову runmycode в событии нажатия кнопки, она работает.

Итак, вопрос в том, как вы можете запустить код после того, как все сценарии закончили загрузку с помощью Enhance.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

Я не знаю, откуда пришел массив; Это определенно не упоминается в документации «Enhance.js».

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top