0

在我的应用程序中,我包含了所有需要的 JS 文件(我的脚本、Twitter Bootstrap 等库等)。

问题是,当我有一个通过 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 页面中不是好方法...

谢谢

4

2 回答 2

1

我将通过以下三种方式之一实现这一目标:

jQuery

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

脚本执行 当使用没有后缀选择器表达式的 URL 调用 .load() 时,内容会在脚本被删除之前传递给 .html()。这会在脚本块被丢弃之前执行它们。但是,如果调用 .load() 时将选择器表达式附加到 URL,则脚本会在 DOM 更新之前被剥离,因此不会执行。两种情况的示例如下所示:

在这里,作为文档的一部分加载到#a 中的任何 JavaScript 都将成功执行。

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

但是,在以下情况下,正在加载到 #b 的文档中的脚本块被剥离并且不被执行:

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

基本上,您可以将 JS 引用添加到 Ajax 请求返回的 HTML,然后 jQuery 将执行它们。

RequireJS 或类似的

与其直接返回 HTML,不如将 HTML 作为 JSON 包的一部分返回,该包还包含一组脚本引用:

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

然后,我将使用 RequireJS 之类的东西遍历 scriptRefs 数组。

只需将代码添加到基本页面

老实说,我更有可能这样做。

于 2012-04-22T21:23:12.180 回答
1

使用像RequireJS$cript这样的脚本加载器。

让您的页面也回复 2 件事:要加载的内容和脚本。最好使用 JSON,例如:

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

然后当返回数据时,解析和绘制内容,然后使用脚本加载器加载脚本。实际上,您可以制作自己的脚本加载器。这只是动态创建<script>标签的问题,将其放入<head>并给它一个src

于 2012-04-22T21:23:39.147 回答