在coffeescript中定义函数

时间:2015-07-16 14:42:55

标签: javascript ruby-on-rails coffeescript

这是我的 rooms.js.coffee

ReferenceError: drag is not defined 
ReferenceError: allowDrop is not defined

当我使用firefox运行服务器和调试时(按F12),有两个错误。

(function() {
  var allowDrop, drag, drop;

  allowDrop = function(ev) {
    return ev.preventDefault();
  };

  drag = function(ev) {
    return ev.dataTransfer.setData("image", ev.target.id);
  };

  drop = function(ev) {
    var data;
    ev.preventDefault();
    data = ev.dataTransfer.getData("image");
    return ev.target.appendChild(document.getElementById(data));
  };

}).call(this);

生成的Javascript如下。

class EnvironmentConfig {
   Map m

   EnvironmentConfig (Map m) {
      this.m = m
      this.class.metaClass.static.propertyMissing = { name ->
         this.propertyMissing(name)
      }
   }

   def propertyMissing(String name) {
      this.@m[name]
   }
}

EnvironmentConfig envConfig = new EnvironmentConfig([TESS_WORKDIR:1])
assert envConfig.TESS_WORKDIR == 1
assert EnvironmentConfig.TESS_WORKDIR == 1
envConfig = new EnvironmentConfig([:])
assert envConfig.TESS_WORKDIR == null
assert EnvironmentConfig.TESS_WORKDIR == null

我认为这是基本问题,但我无法解决这个问题。你能告诉我如何修理它们吗?

1 个答案:

答案 0 :(得分:0)

这是因为函数是上下文化的。

如果要声明全局函数,请使用:

window.allowDrop = (ev) ->
    ev.preventDefault()