1

アセット パイプラインの Rails ガイド ドキュメントを読んでいます。マニフェストに require_tree ディレクティブがある場合、coffeescript ページ固有の生成されたファイルは、デフォルトでユーザーが使用できるようになっていると記載されています。これは私とはうまくいきません。これを含める必要があります

<%= javascript_include_tag params[:controller] %>

特定のコントローラーで。何が欠けていますか?

4

4 に答える 4

1

アセット パイプラインは、すべての JS を単一のファイルapplication.js. 特定のページの JS を呼び出すには、コントローラーとアクションごとに JS を編成する必要があります。これを自動的に実行する RailsS​​cript という gem があり、Turbolinks と互換性があるため、単一ページのアプリケーションのように感じることができます。

RailsS​​cript の学習には数分しかかかりません ( https://github.com/gemgento/rails_script )

rails スクリプトを使用した具体的な例:

# app/assets/javascripts/users.js.coffee

window.App ||= {}
class App.Users extends App.Base

   show: ->
      alert('The users#show action!')
于 2014-11-02T15:15:07.977 に答える
0

最初の段落を誤解したかどうかはわかりませんが、この行が意味するのは、application.jsマニフェストに次のような行が含まれている場合です。

//= require_tree .

そうです、確かに、その特定のページだけでなく、すべてのページに対して、ページ固有の javascript または coffeescript が読み込まれます。説明したようにアセットを特定のページに制限したい場合app/assets/javascripts/は、コントローラーの複数形の名前を持つファイルが必要です.js.

これをその特定のページの別のマニフェストとして個人的に作成し、複数のアセットをロードできるようにします。というコントローラーがあり、UsersControllerそのコントローラーのビューで使用されるさまざまなアセットがあるとします。次に、質問に書いた行が機能するために必要なのは、ファイル.jsまたはusers.jsディレクトリです。users.js.coffeeapp/assets/javascript

または、命名規則を維持するために、次のようにします。

<%= javascript_include_tag "application-#{params[:controller]}"%>

そしてもちろん、ファイルに適切な名前を付けます(application-users.js)。

また、これを行うときは、ページ固有のアセットがすべてのコントローラーで読み込まれないようにする必要があります。単に行を削除し、必要に応じ//= require_tree .て明示的な行に置き換えて//= requireください。

于 2013-09-24T21:04:19.727 に答える
0

一般的にアセットパイプラインを誤解していると思います。javascript ファイルを個別にロードするのではなく、すべての .js.coffee ファイルが 1 つの大きな js ファイルにコンパイルされ、このようにビュー/レイアウトに含める必要があります。

    <%= stylesheet_link_tag "application", media: "all", "data-turbolinks-track" => true %>

1 つのビューでのみ使用できる js コードが必要な場合は、それをアセット パイプラインに含めないでください。

于 2013-09-24T20:05:05.447 に答える
0

Rails でページ固有の JavaScript を実行する方法を次に示します。

  1. jquery-readyselector.jsプラグインをインストールします。(18行です)

    を。https://raw.github.com/Verba/jquery-readyselector/master/jquery.readyselector.jsの内容をコピーします

    b. assets/javascripts/jquery_readyselector.js の新しいファイルにコンテンツを貼り付けます

    c. jquery-readyselector が必要

    // assets/javascripts/application.js 
    //= require jquery_readyselector
    //= require_tree .
    
  2. CSS クラスを作成して、各ページを個別に参照できるようにします。

    <%# views/layouts/application.html.erb %>
    <body class="<%= controller_name %> <%= action_name %>">
    
  3. これで、CSS を使用して JavaScript をページにスコープすることができます。

    // assets/javascripts/posts.js
    $(".posts.index").ready(function() {
    
    });
    
于 2015-03-28T07:47:49.173 に答える