0

like-twitter アプリケーションのチュートリアルを拡張して、(チュートリアルに関係なく) 最初のスクリプトを含めようとしています。

ユーザーがサインインしているときにのみ機能するスクリプトを作成しようとしています (ユーザーがサインインしていないときにスクリプト エラーが発生するため、このルールを作成する必要があることがわかりました)。

js ファイルが呼び出され、次のstatic_pages.js.coffeeようなコードが含まれます。

micropost =
  p: {
    ...
  }
  init: ->
    ...

$(document).ready ->
  micropost.init()

コードは、ユーザーがサインインしたときにのみ表示されるマイクロポストに関連しているため、それについて通知するためのルールが必要です。

views/layout/application.html.erb次のような変数を含むスクリプトをメイン ファイルに入れることができます。

<head>
  <title><%=full_title(yield(:title)) %></title>
  <%= stylesheet_link_tag    "application", :media => "all" %>
  <%= javascript_include_tag "application" %>

  <script type="text/javascript">
      var signed_in = <%= signed_in? =>;
  </script>

  <%= csrf_meta_tags %>
  <%= render 'layouts/shim' %>
</head>

しかし、それはきれいな方法のようには見えません。私の質問は次のとおりです。

  1. どうすればいいのですか?
  2. コントローラー経由で行う必要がありますか?(やり方がわからない…)
  3. また、$(document).ready を static_pages.js.coffee 内に配置しました。これは、dom の構築後にすべての関数を呼び出す呼び出しであるため、メインの application.js に配置する必要がありますか?
4

1 に答える 1

0

この美しさを使用して:https ://github.com/gazay/gon

gemファイルに含める:

gem 'gon'

application.html.erbに(スクリプトの前に)追加します。

  <%= include_gon %>

そして、どのコントローラー内でも、この呼び出しを行うことができます。

class StaticPagesController < ApplicationController
  def home
    gon.signed_in = signed_in?
  end

そして、あなたはあなたのjsからこのパラメータをフェッチすることができます:

console.log(gon.signed_in)
于 2012-08-28T21:05:57.087 に答える