2012-04-22 2 views
0

В мое приложение я включил все необходимые JS-файлы (мои скрипты, библиотеки, такие как Twitter Bootstrap и т. Д.).Как автоматически помещать JS-файлы в AJAX-называемую страницу?

Проблема в том, что когда у меня есть запрос, который вызывается через AJAX, поэтому на вызываемой странице не включены файлы JS, которые включены в мое приложение, и я должен включить их в вызываемую страницу.

Пример: my_scripts.js содержит множество функций JS.

ссылка на страницу вызывается через AJAX

<a href="/articles/create_new" data-remote="true>Create New Article</a> 

/views/articles/_create_new.html.haml

...some content of this file.. #here doesn't work the functions from the file "my_scripts.js" 

, когда я положил в /views/articles/_create_new.html .haml ссылки

= javascript_include_tag "my_scripts" 
...some content of this file.. 

, а затем в /views/articles/_create_new.html.haml эти функции JS работают.

Я хотел бы спросить вас, если существует какой-либо способ, как автоматически поместить все файлы JS в моей каждой отдельных страницах AJAX, потому что всегда включают в себя файлы JS в страницы AJAX не является хорошим способом ...

Благодаря

ответ

1

использовать загрузчик сценариев, например RequireJS или $cript.

Попросите ваши страницы ответить на 2 вещи: содержимое и сценарии для загрузки. Это лучше всего с помощью JSON как:

{ 
    "content" : "content here", 
    "scripts" : ["an","array","of","script","urls"] 
} 

тогда, когда данные возвращаются, разобрать и расписать содержание и после этого использовать скрипт загрузчик для загрузки скриптов. Фактически, вы можете создать свой собственный загрузчик скриптов. Это просто вопрос динамического создания тега <script>, поместите его в <head> и дайте ему src

1

я бы добиться этого в одном из трех способов:

JQuery

от http://api.jquery.com/load/:

Выполнение сценария При вызове .load() с использованием URL без суффикса выражения в селектора, содержание передается .html() до скриптов удаляются. Это выполняет блоки скриптов до того, как они будут отброшены . Если .load() вызывается с выражением селектора, добавленным к URL-адресу, однако, скрипты удаляются до того, как DOM обновляется и, следовательно, не выполняется. Примером обоих случаев может быть :

Здесь любой JavaScript, загруженный в #a в качестве части документа, успешно выполнит .

$('#a').load('article.html');

Однако, в следующем случае, скрипт блоков в документе, который загружается в #b отрезаются и не выполнены:

$('#b').load('article.html #target');

В принципе, вы можете добавьте ссылки JS к HTML, возвращаемому запросом Ajax, и jQuery выполнит их.

RequireJS или Двойники

Вместо того, чтобы вернуть прямой HTML, возвращающие HTML как часть JSON пучка, который также содержит массив ссылок на скрипт:

{ 
    html: '<p>stuff</p>', 
    scriptRefs: [ 'js/one.js', 'js/two.js' ] 
} 

Я бы тогда перебирать массив scriptRefs с чем-то вроде RequireJS.

Просто добавьте код на базовую страницу

Честно говоря, я, скорее всего, просто сделать это.

Смежные вопросы