Доступ к встроенным переменным javascript, которые генерируются с помощью вызова Ajax? Barba.js вопрос конкретно

Я использую Barba.js на своем сайте. Когда страница «Портфолио» загружается через Barba.js, я запускаю функцию, назовем ее get_portfolio_items(). Есть некоторые встроенные переменные javascript, к значениям которых get_portfolio_items() должен получить доступ. Если страница «Портфолио» загружается первой, то get_portfolio_items() прекрасно обращается к этим переменным. Однако, если сначала загрузить другую страницу, а затем перейти на страницу портфолио, я получаю сообщение об ошибке:

loadMoreVars не определен.

Хотя я вижу, что loadMoreVars находится в DOM.

Как я могу получить доступ к этим переменным в get_portfolio_items()? Благодарю вас!

Это скрипт в фактическом HTML, который появляется на новой странице:

<script type="text/javascript">
      var loadMoreVars = {
        postsPerPage : 9,   
        maxNumPages : 6,
      };
</script>

Это функция, которая вызывается всякий раз, когда новая страница загружается через Barba.js.

function get_portfolio_items(){
 alert(loadMoreVars.postsPerPage);
 alert(loadMoreVars.maxNumPages);
}

Это код Barba.js, который запускает функцию при загрузке новой страницы.

Barba.Dispatcher.on('newPageReady', function(current, prev, container) {
    history.scrollRestoration = 'manual';
    get_portfolio_items()
});

Как я могу заставить функцию видеть переменные и, таким образом, предупреждать их?


person nrDigital    schedule 04.12.2019    source источник
comment
Можете ли вы предоставить больше кода? Как-то сложно понять, что происходит.   -  person ssBarBee    schedule 04.12.2019
comment
Привет, я отредактировал выше, чтобы внести больше ясности. Пожалуйста, дайте мне знать, если это имеет смысл   -  person nrDigital    schedule 05.12.2019
comment
Тег script находится внутри заголовка или тела страницы?   -  person ssBarBee    schedule 05.12.2019
comment
Сценарий, содержащий «loadMoreVars», загружается в тело, а barba.js и связанные с ним сценарии также изначально загружаются в тело.   -  person nrDigital    schedule 05.12.2019


Ответы (1)


Немного поздно, но мне удалось заставить это работать. Важно установить переменную в объект окна.

<!-- HTML FILE -->
<script class="loadInlineScript">
  window.loadmoreurl='FOO';
</script>

// JS FILE
Barba.Dispatcher.on('newPageReady', function(currentStatus, oldStatus, container) {
  var inlineScript = $(container).find('script.loadInlineScript')
  inlineScript.each(function(i, elm) {
    eval(elm.innerHTML);
  })
});
person Patrick Kahl    schedule 27.07.2020