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

Jquery CoffeeScript和Rails:设置和获取全局变量,jquery,ruby-on-rails,coffeescript,Jquery,Ruby On Rails,Coffeescript,刚刚进入我的第一个rails应用程序的CoffeeScript部分;以前从未做过JS/CoffeeScript,所以有很多问题。首先是: 在我的应用程序中,用户可以“声称”(拥有)任务(或者我称之为想法)。每个用户在任何给定的时间最多可以有3个想法。因此: 1) 我当前的代码如下所示: $ -> exports = this exports.claimedCount = 0 $('.claim').bind 'ajax:success', -> $(this).t

刚刚进入我的第一个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
,并在用户每次提出想法时递增它。is实际上什么都不做:
未捕获引用错误:未定义claimedCount

为什么呢?我应该如何定义变量?我需要一个全局变量吗?(每个想法都有自己的索赔按钮)

2) 当用户已经有了一些想法时,他们可能会呈现页面。因此,我需要在第一次呈现页面时使用Rails设置
claimedCount
。任何关于这方面的提示都将不胜感激(我是否应该将我的
.js.coffee
文件重命名为
.js.coffee.erb
,并在那里执行?js init代码的常见位置是什么

非常感谢您提供的帮助。

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

您可以检查如何在coffee脚本中声明全局变量(主要使用
window.myvariable

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

然后在你的js中

$('#claimscont').val()

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

您可以检查如何在coffee脚本中声明全局变量(主要使用
window.myvariable

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

然后在你的js中


$(“#claimscont”).val()

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

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

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

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

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

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

javascript的每一位都应该限定在最小相关DOM元素的范围内。我想我应该开放我使用的内部js‘框架’的源代码。当然,我应该以最有限的方式来定义变量。这就是我的问题:我能把它们限制到什么程度,以及如何限制?我需要全局变量吗?如果没有,我需要什么?基本上,创建一个名称空间:
YourAppName
。然后,对于每个页面,您可以在应用程序的一个页面中包含一个名称空间,javascript的每一个部分都应该限定为最小的相关DOM元素。我想我应该开放我使用的内部js‘框架’的源代码。当然,我应该以最有限的方式来定义变量。这就是我的问题:我能把它们限制到什么程度,以及如何限制?我需要全局变量吗?如果没有,我需要什么?基本上,创建一个名称空间:
YourAppName
。然后,对于每个页面,您可以在应用程序的一个名称空间中包含一个名称空间。请记住,在生产环境中,您的资产是预编译的,因此声明计数不会更新(除非您重新编译资产)
.js.coffee.erb
几乎从来都不是一个好主意。请记住,在生产过程中,您的资产是预编译的,因此索赔计数不会更新(除非您重新编译资产)
.js.coffee.erb
几乎从来都不是个好主意