Я интегрирую RequireJS в CMS, поэтому я разместил это в нижней части шаблона моей страницы:
<html>
<body>
{Placeholder1}
<script src="scripts/require.js" data-main="scripts/main"></script>
{Placeholder2}
</body>
</html>
Затем на каждой странице я хотел бы создать функцию, использующую RequireJS. Поэтому я попытался разместить это внизу страницы:
<html>
<body>
<h1>Home</h1>
<div class="slider">Slider content</div>
<script src="scripts/require.js" data-main="scripts/main"></script>
<script type="text/javascript">
require([
'jquery',
'utils',
'slider'
], function ($, utils, slider) {
slider.start();
});
</script>
</body>
</html>
Но я получаю 404 в файлах jquery, utils и js слайдера. Похоже, он не читает мои конфиги main.js, которые у меня есть:
require.config({
paths: {
jquery: 'libs/jquery-1.8.1.min',
utils: 'libs/utils',
slider: 'libs/jquery.slider.min'
},
shim: {
slider: ['jquery']
}
});
require([ 'utils' ], function (utils) {
utils.init();
});
Я попытался загрузить RequireJS и main в заголовок страницы, но таким образом получил противоречивые результаты. Иногда jquery, утилиты и слайдер загружались вовремя, а иногда нет. Как будто встроенный «require» в нижней части страницы не знает об основном RequireJS на странице или правилах зависимостей, но моя точка останова попадает в main.js, поэтому я знаю, что она вызывается. Это потому, что main.js загружается асинхронно, но мой встроенный блок «требуется» в нижней части страницы загружается при рендеринге страницы? Как мне обойти это?
Раньше я успешно использовал RequireJS, но без CMS. Я всегда использовал «define», и модули всегда вызывались асинхронно, но мне никогда не приходилось вызывать встроенную функцию RequireJS, как это. Любые идеи о правильном способе сделать это?