无法修改Coffeescript';在JQuery侦听器中设置全局变量
今天我把我的一些javascript代码迁移到coffeescript中,陷入了一件非常愚蠢的事情,尽管我不知道如何让它工作 我想在触发单击事件时更新全局变量的值,请查看下面的代码以了解我的猜测 这是密码无法修改Coffeescript';在JQuery侦听器中设置全局变量,coffeescript,global-variables,jquery,Coffeescript,Global Variables,Jquery,今天我把我的一些javascript代码迁移到coffeescript中,陷入了一件非常愚蠢的事情,尽管我不知道如何让它工作 我想在触发单击事件时更新全局变量的值,请查看下面的代码以了解我的猜测 这是密码 @activeObject = null # Some other code $ -> $('#header').click -> if !headerSelected showMenu '#header-menu', event else
@activeObject = null
# Some other code
$ ->
$('#header').click ->
if !headerSelected
showMenu '#header-menu', event
else
@activeObject = "#header"
showMenu '#menu-style-header', event
不幸的是,即使触发了click事件,变量也没有得到更新
我想出了一个解决办法。我创建了一个函数来设置变量的值并调用它而不是赋值,这次它成功了
我只是想知道为什么我不能用另一种方式。对我来说,这是一个简单的操作,仅仅为此定义一个新函数似乎很愚蠢。您的问题是单击处理程序内部的
@
(又称此
)与外部的不同,因此:
@activeObject = null
这是:
@activeObject = "#header"
是指两个不同的activeObject
s。您应该能够使用=>
绑定所有内容,以获得正确的此
:
$ =>
$('#header').click =>
#...
或者更好(IMHO),只需在两个位置直接引用window.activeObject
,这样每个人都可以清楚地看到您引用的是全局变量:
window.activeObject = null
$ ->
$('#header').click ->
if !headerSelected
showMenu '#header-menu', event
else
window.activeObject = "#header"
showMenu '#menu-style-header', event
或者,您可以完全停止使用globals,转而使用数据属性:
$ ->
$('#header').data 'activeObject', null
$('#header').click ->
if !headerSelected
showMenu '#header-menu', event
else
$(@).data 'activeObject', '#header'
showMenu '#menu-style-header', event
您的问题是,单击处理程序内部的
@
(又称this
)与外部的不同,因此:
@activeObject = null
这是:
@activeObject = "#header"
是指两个不同的activeObject
s。您应该能够使用=>
绑定所有内容,以获得正确的此
:
$ =>
$('#header').click =>
#...
或者更好(IMHO),只需在两个位置直接引用window.activeObject
,这样每个人都可以清楚地看到您引用的是全局变量:
window.activeObject = null
$ ->
$('#header').click ->
if !headerSelected
showMenu '#header-menu', event
else
window.activeObject = "#header"
showMenu '#menu-style-header', event
或者,您可以完全停止使用globals,转而使用数据属性:
$ ->
$('#header').data 'activeObject', null
$('#header').click ->
if !headerSelected
showMenu '#header-menu', event
else
$(@).data 'activeObject', '#header'
showMenu '#menu-style-header', event
我认为混淆是关于
@
的用法,这基本上只是一个快捷方式。
如果您编译代码并查看它生成的CoffeeScript编译器,那么混淆就会变得很清楚
this.activeObject = null;
$(function() {
return $('#header').click(function() {
if (!headerSelected) {
return showMenu('#header-menu', event);
} else {
this.activeObject = "#header";
return showMenu('#menu-style-header', event);
}
});
});
如果activeObject是全局的,您可以引用它
window.activeObject=null
及
window.activeObject=“#header”
在这段代码中的两种情况下,可能会尝试在第二次出现时在没有窗口的情况下使用它,但这将导致新的局部变量被错误地定义
一般来说,在开始使用CoffeeScript时,尝试像这样的小鹬类是很有用的
在
立即试用
选项卡上我认为混淆之处在于@
的用法,这基本上只是一种快捷方式。
如果您编译代码并查看它生成的CoffeeScript编译器,那么混淆就会变得很清楚
this.activeObject = null;
$(function() {
return $('#header').click(function() {
if (!headerSelected) {
return showMenu('#header-menu', event);
} else {
this.activeObject = "#header";
return showMenu('#menu-style-header', event);
}
});
});
如果activeObject是全局的,您可以引用它
window.activeObject=null
及
window.activeObject=“#header”
在这段代码中的两种情况下,可能会尝试在第二次出现时在没有窗口的情况下使用它,但这将导致新的局部变量被错误地定义
一般来说,在开始使用CoffeeScript时,尝试像这样的小鹬类是很有用的
在上,立即尝试选项卡