2015-08-15 4 views
2

В настоящее время я запускаю скомпилированный файл scripts.js, который активирует кучу различных возможностей пользовательского интерфейса (кладка, навигация и т. Д.) С использованием метода onRendered.MeteorJS не работает внешний скрипт.js при перезагрузке?

Template.mainLayout.onRendered(function() { 
    $.getScript('js/scripts.js'); 
}); 

Мой вопрос, если я перейти на другую страницу, как/команды, сценарий не перезапускать, то есть на других страницах, кладка больше не работает. Кроме того, когда я возвращаюсь к домашней странице, сценарий также ломается, что делает бар Nav нарушенным.

Пожалуйста, дайте мне знать, если я использую эту функцию неправильно?

+0

Вы используете «mainLayout» в железном маршрутизаторе? – FullStack

+0

Нет, я использую потоковый маршрутизатор и макеты пламени. Теперь я загружаю скрипт непосредственно в файл scripts.js с той же функцией. – eddiewang

ответ

1

Если вы размещаете скрипты самостоятельно, поместите их в папку client/compatibility. Метеор автоматически включит их в ваше приложение.

Если вы хотите загрузить их из CDN, то отредактируйте вашу папку client/index.html, чтобы добавить тег script.

Затем в вашем обратном вызове onRendered введите код, который инициализирует ваши собственные скрипты, например. this.$('table').datatable() или что угодно.

+0

Теперь приблизиться к решению. Загружайте их через клиент/совместимость, и теперь я переопределяю код, который не перезагружается. Однако onRendered только инициализирует мои скрипты, как я могу повторно инициализировать этот скрипт при каждой перезагрузке (на новый маршрут)? – eddiewang

+1

Если 'onRendered' не повторяется, это потому, что ваш шаблон не является рендерингом, даже если он исчезает и возвращается (т. Е. Вы изменяете маршруты и возвращаете). Чтобы заставить его переименовывать, он должен содержать переменную, которая изменяется; например, помощник, который возвращает 'Date.now()' или somesuch. И если это кажется взломанным, это потому, что это ... если вы думаете, что ваш шаблон должен переиздавать, когда Метеор думает, что это не нужно, нечто большее, вероятно, неверно. Я предлагаю вам опубликовать ваши конкретные обстоятельства/код (включая плагины jQuery или тому подобное, что вы можете пытаться инициализировать) в новом вопросе. –

+0

Я попытался это: 'Template.mainLayout.helpers ({ \t реакционная способность: Date.now() });' Это просто для обучения проекта, так Hacky хорошо. Тем не менее, он по-прежнему не влияет на rerender, даже если я устанавливаю переменную изменения. – eddiewang

0

Eddie, .getscript() - это асинхронная функция, поэтому вам нужно указать calback. Мне нужно было загрузить в метеоре внешнюю JS для плакатного листка. Использование async, определение функций обратного вызова сделало взлом:

$.getScript('js/l.control.geosearch.js', function(data, textStatus, jqxhr) { 
     $.getScript('js/l.geosearch.provider.google.js', function(data, textStatus, jqxhr) { 
      new L.Control.GeoSearch({ 
       provider: new L.GeoSearch.Provider.Google(), 
       position: 'topcenter', 
       showMarker: false, 
       retainZoomLevel: true, 
      }).addTo(map); 
     }) 
    }) 
Смежные вопросы