CoffeeScript和Rails:设置和获取全局变量

时间:2013-01-02 18:38:34

标签: jquery ruby-on-rails coffeescript

刚刚访问我的第一个rails应用程序的CoffeeScript部分;从来没有做任何JS / CoffeeScript,所以很多问题。从:

开始

在我的应用中,用户可以“声明”(获得所有权)任务(或者我称之为创意)。每个用户在任何给定时间最多可以有3个想法。所以:

1)我目前的代码如下:

$ ->
  exports = this
  exports.claimedCount = 0
  $('.claim').bind 'ajax:success', ->
    $(this).text("Claimed")
    $(this).addClass("btn-success")
    claimedCount++
    alert(claimedCount)

假设要做的是声明一个全局var claimedCount并在每次用户声明一个想法时递增它。 实际的作用是什么:Uncaught ReferenceError: claimedCount is not defined

为什么?我该如何定义变量?我是否甚至需要一个全局变量来实现我的目标? (每个想法都有自己的声明按钮)。

2)用户可能在已经声明了一些想法时呈现页面。因此,我需要在首次呈现页面时使用Rails设置claimedCount。任何关于此的指针都将非常感激(我应该将我的.js.coffee文件重命名为.js.coffee.erb并在那里执行吗?这样的js init代码的常用位置是什么?)

非常感谢您提供任何帮助。

2 个答案:

答案 0 :(得分:3)

我同意Khaled对第一个问题的回答。

在第二个方面,我宁愿将文件重命名为 .js.coffee.erb ,以便首先使用erb进行预处理并编写如下内容:

window.claimedCount = <%= @user.claims.count %>

答案 1 :(得分:2)

如果您将代码转换为js2coffee.com并将其转换为js,您将看到您的变量不是全局变量,因为它位于函数内部。

您可以查看question如何在咖啡脚本中声明全局变量(主要是使用window.myvariable

关于第二个问题,您可以将值放在html的隐藏字段中,然后使用jquery选择器抓取它。

<input type="hidden" id="claimsCount" value=<%= @user.claims.count %>>

然后在你的js

$('#claimsCount').val()