質問

このCoffeeScript コード Gitlabから、そしてそれがどのように機能するのか疑問に思います。

class Issue
  constructor: ->
    $('.edit-issue.inline-update input[type="submit"]').hide()
    $(".issue-box .inline-update").on "change", "select", ->
      $(this).submit()
    $(".issue-box .inline-update").on "change", "#issue_assignee_id", ->
      $(this).submit()

@Issue = Issue
.

これは問題に関連するビューでのみ使用されているように思われますが、HTMLの問題のどこにでも呼び出されていません。ここでシーンの後ろに魔法のようなものがありますか?また、@Issue = Issueラインの重要性は何ですか?

役に立ちましたか?

解決

@Issue = Issueは、ローカル変数をグローバルスコープに公開するだけです。これはRubyやRailsでは何もありません。それは純粋にコーヒースクリプトの慣用句です。

CoffeeScriptは、グローバルスコープ内の変数の作成を防ぐために設計されているラッパー内で実行されます。そしてこのラッパーでは、this(または@)がグローバルオブジェクトです。

だからこれ:

class Issue
  constructor: ->

@Issue = Issue;
.

ほぼこのJS:

(function() {
  var Issue;

  Issue = (function() {
    function Issue() {}
    return Issue;
  })();

  this.Issue = Issue;
}.call(window));
.

そのJSでは、windowthisになり、ウィンドウのプロパティがグローバル変数になります。そのため、Flow Onでは、他のJSファイルにIssueのみを入力する必要があり、問題コンストラクターがあります。

@Issue = Issueラインがないと、Issueコンストラクタはそのコードの外で利用可能ではなく、他のファイルは使用できません。


言い換えれば、これと同じです:

window.Issue = Issue;
.

私は実際にほとんどの時間を好む。 windowとして起動しているのは、常にwindowを意味しますが、@は、表示されている場所によって多くのことを意味します。

他のヒント

JavaScriptと同じように、CoffeeScriptでは適切な名前空間はありません。@Issue = Issuethis.Issue = Issueに変換されます。私の推測は、このスニペットがビルド中に他のファイルと連結されることを意図していることです。

var namespace1 = {subnamespace1: {}};

(function() {
  // Several concatenated files
}).call(namespace1.subnamespace1);
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top