我正在尝试使用CoffeeScript
Rails
和进行一个非常简单的任务Haml
。我没用CoffeeScript
太多,但是我想尝试一下。
当用户按下按钮时,我希望视图滚动到特定的div id。在页面顶部,我有一个像这样的ID:
#area_1
我的链接如下所示:
= link_to "Area", "#", id: "area_button_1"
在我自动生成的CoffeScript
文件中,我有一个如下所示的函数:
$ ->
scrollToArea = (button, area) ->
$(button).click ->
scrollTo(area, 800)
我尝试在我的一个视图文件中调用此方法,如下所示:
:javascript
scrollToArea("#area_button_1", "#area_1")
但这是行不通的。关于我在做什么错的任何想法吗?
您可能有范围问题。$ ->
是一个函数调用,例如:
$(function() { ...
});
和CoffeeScript会自动将变量的作用域限定在它们的函数范围内,以便您的CoffeeScript变成JavaScript,如下所示:
$(function() {
var scrollToArea = function(button, area) { ... };
});
整个过程还有一个自执行函数包装器(除非您使用进行编译-b
),以防止范围爬行。
您甚至不需要在$ ->
这里,该代码仅定义了一个函数,因此它可以随时运行,而无需等待DOM准备就绪。scrollToArea
如果您想在其他地方使用它,您还希望将其功能推入全局名称空间。结果如下所示:
window.scrollToArea = (button, area) ->
$(button).click ->
scrollTo(area, 800)
或者:
# `this` is `window` in this context so `@x` is the same as `window.x`
@scrollToArea = (button, area) ->
$(button).click ->
scrollTo(area, 800)
您可能还需要在$()
其中使用包装器,在DOM准备就绪之前scollToArea
,您可能不想调用scrollToArea
:
:javascript
$(function() { scrollToArea("#area_button_1", "#area_1") )
我不是HAML专家,所以希望我不会对语法有所怀疑。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句