2017-07-11 5 views
1

私が使用しています:私html.erbページではJavaScript資産dosen't負荷

Linux Ubuntu 16.04 

ruby 2.4.0p0; 

rails 5.1.1 

を私はレールでbegginnerと私がするためにlynda.comでRailsの4エッセンシャルトレーニングにルビーを踏襲しています学ぶ。私は今、ロードjs資産タスクで立ち往生しています。

私はJSの機能が含まれている "アプリ/資産/ JavaScriptの/ demo.js" ファイル作成しました:その後、私は私のマニフェストファイルで、このファイルをロードしている

function jsRoar(name) { 
 
    alert('I am ' + name + '. Hear me roar!'); 
 
}

を」アプリ/資産/ JavaScriptの/ public.jsアプリ/ビュー/レイアウト/ APPLIC「私は、外部追加した後

//= require jquery 
//= require jquery_ujs 
//= require demo 

は、私のレイアウトへのjsのinclude」 ation.html.erb ":

<%= javascript_include_tag "public" %> 

私のコントローラで私が入力して、私のレイアウトが含まれている『

』アプリ/コントローラ/ demo_controller.rb

layout 'application' 
をそして最後に、私は次のように入力して、私の関数を呼び出しています私のデモ/ index.html.erbにおけるこれらのJSコード:その後

<%= link_to('Roar', '#', :onclick => "jsRoar('Yassser');return true;") %> 
<%= javascript_tag("jsRoar('Rails');")%> 

は、私は私のクロムコンソールで「未定義の機能」を取得し、アラートが.Iは同じHTMLで関数を定義して表示されていません。エルブとそれはそれを動作させるJavaScriptの問題ではないと思う。 私もその、私は自分のサーバーを実行したときに最初に、私はので、私は、「設定/初期化子/ assets.rb」で、この行を追加することで固定している資産のコンパイルの問題を取得している言及する必要があります:

Rails.application.config.assets.precompile += %w(public.js) 

私は詳細はこちらをご覧ください。 助けてください。

+0

すべてのロードが終了したらポップアップが表示されますか? –

+0

あなたのページに含まれている 'public.js'を見ることができます(つまり、Railsが後処理した後にブラウザが見るように)' demo.js'が含まれていることを確認できますか?私の推測では、あなたのマニフェストファイルの構文について、それが含まれないようにするための何かがあるということです。 – pjmorse

+0

@SimpleLime:ページを読み込んだ後に電話をかけたときにページを読み込んだ後もリンクをクリックしても、リンクをクリックしてもポップアップが表示されません。 –

答えて

0

私はこれだと思う:

<%= javascript_tag("jsRoar('Rails');")%> 

は次のようになります。

<%= javascript_include_tag("demo") %> 
+0

なぜですか? 'public'マニフェストにはすでに' demo'が必要なので、 'javascript_include_tag(" public ")'は関数をロードしているはずです。私はあなたが間違っていると言っているわけではありませんが、あなたが正しいと思われる理由をあなたの答えから理解できません。 – pjmorse

+0

実際には、これは問題ではないと思います。 '<%= javascript_tag(" jsRoar( 'Rails'); ")%>'ヘルパーは関数を呼び出すことを意図していたからです。 jsリソースの読み込みでは、私は既にレイアウトでpublic.jsがこのプロジェクトのマニフェストファイルであるため、ヘッダーセクションに '<%= javascript_include_tag(" public ")%>' を追加してレイアウトを行いました。 –

+0

私は 'application.js'に' require'が含まれているという違いを試してみました。期待どおりに動いていたので、pjmorseは正しいと思ってjsファイルが正しくレンダリングされていないと思います。そして、デフォルトで '' application'' –

0

このコードは、あなたのビューで動作するかどうかを参照してください:

$(document).ready(function(){ 
    jsRoar('Yassser'); 
}) 
+0

を使用するので、あなたのコントローラがアプリケーションとは異なるレイアウトを持つ他のコントローラから継承しない限り、 'layout 'application''を呼び出す必要はありません。仕事はありません。ごめんなさい :( –

2

私の問題は、「デモを削除した後に解決されました.coffee "ファイル。 私の問題は、同じ名前(しかし異なる拡張子)の "demo.js"と "demo.coffee"という2つのファイルがあることに由来していることがわかりました。 Railsアセットヘルパーはcoffescriptとjsファイルを同じように扱うので、これはあいまいです。 "demo.coffee"を削除して、すべての問題が解決されました。 ありがとうございます。 彼の返信で@maxのための素晴らしいthnx this post

関連する問題