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 Web サイトで遊んで、cube 関数で遊んだので、私が思う関数名を呼び出すことができるはずです。

私の知識にギャップがあるため、質問をしています。そのギャップを埋める助けがあれば大歓迎です。

4

1 に答える 1

2

デフォルトでは、CoffeeScript はグローバルを作成しませんreorder。定義されているファイルの外部にアクセスしようとしているように見えます。

ただし、次のように記述することで、明示的にグローバル名前空間に何かを入れることができます

window.reorder = reorder
于 2012-07-11T10:23:31.493 に答える