0

これを使用して、反応の要素にクラス名を追加しようとしています:

className: "btn btn-primary #{!@valid() ? 'disabled' : ''}"

しかし、これはclass="btn btn-primary true"

このコーヒー コードは、次のように正しくない JS にコンパイルされます。

className: "btn btn-primary " + ((ref = !this.valid()) != null ? ref : {
          'disabled': ''
        }),

コーヒーでこれを行う正しい構文は何ですか?

4

1 に答える 1

2

CoffeeScript には C スタイルの?:3 項がないため、次のようになります。

!@valid() ? 'disabled' : ''

次のように解析されます。

!@valid() ? ({ 'disabled' : '' })

これは存在演算子です:

実存的オペレーター

JavaScript で変数の存在を確認するのは少し難しいです。if (variable)... 近いですが、ゼロ、空の文字列、および false の場合は失敗します。CoffeeScript の存在演算子?は、変数がnullまたはundefinedでない限り true を返します。これは、Ruby のものと似ています。nil?

オブジェクトリテラルと組み合わせる。したがって、あなたが見ている奇妙に見える JavaScript です。

CoffeeScript はの代わりにif?:を使用します。

CoffeeScript は、可能な場合は三項演算子を使用し、そうでない場合はクロージャー ラッピングを使用して、 ifステートメントを JavaScript 式にコンパイルできます。CoffeeScript には明示的な 3 項ステートメントはありません。通常のifステートメントを 1 行で使用するだけです。

これを JavaScript で言うと、次のようになります。

!this.valid() ? 'disabled' : ''

次に、CoffeeScript で次のように言います。

if !@valid() then 'disabled' else ''

そして"#{...}"式で動作するので:

className: "btn btn-primary #{if @valid() then 'disabled' else ''}"
于 2016-03-19T18:23:28.800 に答える