【问题标题】:How to create a condition in javascript file with the controller in Rails如何使用 Rails 中的控制器在 javascript 文件中创建条件
【发布时间】:2012-08-28 17:44:18
【问题描述】:

我正在尝试扩展 like-twitter application tutorial 并包含我的第一个脚本(不管教程如何)。

我正在尝试制作一个仅在用户登录时才起作用的脚本(我发现我需要制定此规则,因为当用户未登录时我会收到脚本错误)。

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 中 - 我应该将它放在主 application.js 中,因为这是在构建 dom 后调用所有函数的调用吗?

【问题讨论】:

    标签: javascript ruby-on-rails model-view-controller coffeescript


    【解决方案1】:

    使用这个美女: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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多