0

我在 Ruby on Rails 中遇到了一个奇怪的错误。我正在尝试实现Uploadify JQuery 库以使用 flash 对象处理多个上传。我正在使用 Ajax 加载的选项卡上实现此功能。以前,我将我的 Uploadify js 文件的 javascript_include_tag 放在与 Uploadify 影响的相关 HTML 相同的 ajax 页面上。然而,这产生了一些非常奇怪的结果。有时在该页面上对我的 Uploadify 函数的调用会起作用,而有时它会完全失败。如果在这种情况下,通过在选项卡之间切换并第二次或第三次检索 Ajax 页面无法正常工作,它通常可以解决问题。奇怪的是,如果我使用 Firebug 检查 HTML,即使 Javascript 功能正常工作,也看不到 javascript 链接,尽管我确实看到了对该文件的网络请求。我尝试将用于 uploadify 的 javascript_include_tag 移动到我的应用程序布局中的 head 标签,但随后 Uploadify flatout 完全停止工作。

当我将 Ajax 页面上带有链接标签的 uploadify 功能推送到我的生产服务器时,问题仍然存在,但频率降低了很多。事实上,我只注意到它几次。此外,此功能不再适用于任何其他浏览器时期,只是 Firefox,但这可能是一个完全不同的问题,我会弄清楚(即使 Javascript 应该是独立于浏览器的......)。

当我尝试在其中包含 uploadify 调用时,我的 head 标签如下所示:

%head
    %title Virtual Robot Games
    = stylesheet_link_tag 'style.css','web_app_theme.css', 'events.css', :media => 'screen'    
    = csrf_meta_tag         
    = javascript_include_tag 'jquery'
    = javascript_include_tag 'prototype'
    = javascript_include_tag 'noconflict.js'
    = javascript_include_tag 'effects.js'
    = javascript_include_tag 'calendar_date_select'
    = javascript_include_tag 'highlight'
    = javascript_include_tag 'textcounter'
    = javascript_include_tag 'scriptaculous.js'
    = javascript_include_tag 'collapsible.js'
    = javascript_include_tag 'bbhelp.js'
    = javascript_include_tag 'swfobject'
    = javascript_include_tag 'application' 
    = javascript_include_tag 'uploadify'

额外信息:

我同时使用 Prototype 和 JQuery,它们经常相互冲突,但我通常能够解决这个问题。我从来没有遇到过两个库发生冲突的情况,而且我的 JQuery 有时只能工作。通常,如果发生冲突,它完全不会起作用。

编辑 实际上我想我找到了问题,我正在使用jquery-rails gem,我忘记在我的 Uploadify js 文件中包含 JQuery 库。相反,我有一个指向 googleapi 的内联链接。用包含调用替换 google api 链接解决了问题。尽管我最初的问题是存在的,但我的 JavaScript 链接是否应该全部存储在我的 head 标签中?

4

1 回答 1

1

“虽然我最初的问题是,我的 JavaScript 链接是否应该全部存储在我的 head 标签中?”

javascript_include_tag只是<script></script>在 html 标记中生成元素的助手。因此,您可以在页面结束之前</body>或页面中的任何位置添加它。您也可以在部分中使用它。另一种常见的做法是content_for在模板/部分和布局中使用关联的标签,例如在<head>部分中。它的目的是仅加载相关的 js,当站点只有一部分是 JavaScript 密集型(可能是图表/图形/报告等)并且其他站点模块根本不使用该 js 库(但所有模块共享通用布局)。

综上所述,放置的位置javascript_include_tag更多地取决于 html 页面上的 JavaScript 执行规则,而不是其他任何东西。将其用作<script></script>元素。

于 2012-07-12T18:13:38.767 回答