0

RubyonRailsで奇妙なバグに遭遇しました。フラッシュオブジェクトを使用して複数のアップロードを処理するためにUploadifyJQueryライブラリを実装しようとしています。この機能は、Ajaxがロードされているタブに実装しています。以前は、Uploadifyの影響を受ける関連HTMLと同じajaxページにUploadifyjsファイルのjavascript_include_tagがありました。でも、これはいくつかの非常に奇妙な結果を生み出しました。そのページのUploadify関数の呼び出しが機能する場合もあれば、完全に失敗する場合もあります。タブを切り替えてAjaxページを2回目または3回取得しても機能しなかった場合は、通常、問題が修正されました。奇妙なことに、Firebugを使用してHTMLを検査した場合、ファイルのネットワーク要求は表示されましたが、Javascript機能が機能している場合でもjavascriptリンクは表示されませんでした。uploadifyのjavascript_include_tagをアプリケーションレイアウトのheadタグに移動しようとしましたが、Uploadifyflatoutが完全に機能しなくなりました。

Ajaxページのリンクタグを使用してuploadify機能を本番サーバーにプッシュしたとき、問題は依然として存在していましたが、それほど頻繁ではありませんでした。実際、私はそれに気づいたのは数回だけでした。また、この機能はFirefoxだけでなく、他のブラウザ期間では機能しなくなりますが、これはまったく別の問題である可能性があります(Javascriptはブラウザに依存しないはずですが...)。

uploadify呼び出しを含めようとしたときのヘッドタグは次のようになりました。

%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の両方を使用しており、それらは常に互いに競合していますが、通常はこれを回避できます。2つのライブラリが競合しているシナリオは一度もありませんでしたし、たまにしか機能しないJQueryもありました。通常、競合がある場合、それはまったく機能しません。

編集 実際、私は問題を理解したと思います。私はjquery-rails gemを使用していて、UploadifyjsファイルにJQueryライブラリを含めるのを忘れていました。代わりに、googleapiへのインラインリンクがありました。google apiリンクをincludes呼び出しに置き換えると、問題が修正されました。私の元の質問は立っていますが、JavaScriptリンクをすべてheadタグに保存する必要がありますか?

4

1 に答える 1

1

「私の最初の質問はそのままですが、私の JavaScript リンクはすべて私の head タグに保存されるべきですか?」

javascript_include_tag<script></script>は、html マークアップで要素を生成する単なるヘルパーです。したがって、たとえば</body>、ページの最後の前または任意の場所に追加できます。部分的に使用することもできます。もう 1 つの一般的な方法はcontent_for、テンプレート/パーシャルとレイアウトで関連するラベル (<head>セクションなど) を使用することです。その目的は、サイトの一部のみが非常に JavaScript を集中的に使用し (おそらくチャート/グラフィックス/レポートなど)、他のサイト モジュールがその js ライブラリをまったく使用しない場合に、関連する js のみをロードすることです (ただし、すべてのモジュールは共有します)。一般的なレイアウト)。

要約すると、 の配置はjavascript_include_tag、何よりも html ページの JavaScript 実行規則に依存します。要素として使用し<script></script>ます。

于 2012-07-12T18:13:38.767 に答える