在onclick属性中使用coffeescript create function

时间:2014-07-24 00:43:52

标签: javascript ruby-on-rails coffeescript

我开始使用rails和coffeescript,但现在我遇到了一个奇怪的问题。 我想创建一个名为log的函数,我在.coffee中创建了这样的函数:

log = (message) -> console.log message

它翻译成这样的js:

(function() {
  var log;

  log = function(message) {
    return console.log(message);
  };

  log('Podcast downloader 2000');

}).call(this);

如果我按照我在示例中调用的方式调用该函数,则可以正常工作。 但现在我想使用onclick =“log('avb')

来调用它
<span onclick="log('abc')"/>

但该函数不在正确的范围内,因此不会被调用。

如何更改代码以便我可以从onclick属性调用该函数?

谢谢!

1 个答案:

答案 0 :(得分:4)

正如Sterling在评论部分中所建议的那样,使用onclick并不是一个好习惯,但如果你真的需要这样做,那么将函数放在全局命名空间中

window.log = (message) -> console.log(message)

在这种情况下,最好为应用程序创建命名空间并在那里添加功能。

@MyNamespace = {}

class MyNamespace.CommonFunctions
  @log = (message) -> console.log(message)

然后在你看来

<span onclick='MyNamespace.CommonFunctions.log("abc")'>

这可以保持组织有序,并且不会阻塞全局命名空间。

LISTENER APPROACH

更好的方法是使用事件侦听器(使用jquery)。

# view
<span class='msg'></span>

# js
log = (message) -> console.log(message)

$('.msg').on 'click', -> log('abc')