3

在我的 Rails 应用程序中,我有一些普通的旧 JS:

    function reorder(divid,url) {
        jQuery(divid).sortable({
          axis: 'y',
          dropOnEmpty: false,
          handle: '.drag',
          cursor: 'crosshair',
          items: 'li',
          opacity: 0.4,
          scroll: true,
          update: function(){
            jQuery.ajax({
              type: 'post',
              data: jQuery(divid).sortable('serialize'),
              dataType: 'script',
              url: url)
          }
        });
    }

当我打电话时它有效:

     reorder("#pages","<%= changeorder_pages_path %>");

所以我决定将我的函数转换为 CoffeeScript,它给了我这个:

(function() {
  var reorder;

  reorder = function(divid, url) {
    return jQuery("#pages").sortable({
      axis: "y",
      dropOnEmpty: false,
      handle: ".drag",
      cursor: "crosshair",
      items: "li",
      opacity: 0.4,
      scroll: true,
      update: function() {
        return jQuery.ajax({
          type: "post",
          data: jQuery("#pages").sortable("serialize"),
          dataType: "script",
          complete: function(request) {
            return jQuery("#pGESs").effect("highlight");
          },
          url: "/pages/changeorder"
        });
      }
    });
  };

}).call(this);

但我的电话不再起作用 - 我收到 Firebug 错误:

reorder is not defined

所以对于我的问题 - 我现在如何调用该函数,它是 CoffeeScripted?

我读过这个:Calling a function by its name

但我不知道他们在说什么。我从未使用过 global=this,也不知道它的作用或为什么要使用它。

我也读过这个:http ://elegantcode.com/2011/06/30/exploring-coffeescript-part-2-variables-and-functions/

还有这个:http ://www.informit.com/articles/article.aspx?p=1834699

我意识到 CoffeeScript 正在保护我免受全局变量的影响并使我的代码变得更好——但我找不到关于如何调用函数的解释。

我玩过 CoffeeScript 网站并玩过 cube 函数——所以我应该能够调用我认为的函数名称。

我问这个问题是因为我的知识存在差距 - 任何填补这一差距的帮助将不胜感激。

4

1 回答 1

2

CoffeeScript 默认情况下不创建全局变量,看起来好像您正在尝试访问reorder定义它的文件之外的文件。

但是,您可以通过编写显式地将某些内容放入全局命名空间中

window.reorder = reorder
于 2012-07-11T10:23:31.493 回答