1

CoffeeScript を使用して backbone.js アプリをコーディングすることに固有の問題はありますか? 修正できない問題に遭遇したり、特に厄介な回避策を使用しなければならなかったりしましたか?

4

3 に答える 3

6

本当に問題ありません。少なくとも、簡単に回避できないものはありません。

CSの使用に関する問題は、どこでもCSを使用する場合と同じ問題です。

  • デバッグは、生成されたJSで引き続き実行されます
  • CSには前処理ステップが必要ですが、これは時々厄介になる可能性があります
  • チームの他のメンバーはCSを知らない可能性があります
  • CSには奇妙なことがいくつかあります(「クラス」を導入しますが、実際のクラスではありません)

さらに、Coffeescriptを使用したBackbone devは「クラス」ベースであるため、クラスを別々のファイル、別々のフォルダーに分けたいと思うでしょう。このため、クラスが順不同で定義されている状況に陥る可能性があります。たとえば、コレクションがモデルの前に定義される場合がありますが、これは発生しません。このために、依存関係(インポート)を管理できるものを使用することをお勧めします。私はコーヒートースターを使用していますが、他にもいくつかのオプションがあります(たとえば、Railsにはアセットパイプラインに依存関係管理が組み込まれています)

これは、バックボーンコードを書くための私の好ましい方法です。私の意見では、Backbone.jsの開発は、実際にはJavascriptよりもCoffeeScriptの方が優れています。私にとって、彼らはチョコレートとピーナッツバターのように一緒に行きます。(誰もがチョコレート/ピーナッツバターが好きというわけではありません...誰もがBB / CSが好きというわけではありません)

クラスセマンティクス バックボーン開発は、プロトタイプの拡張に大きく依存しており、これはCoffeeScriptに組み込まれているものです。したがって、JSでビューを拡張する場所は次のとおりです。

App.Models.MyModel = Backbone.View.extend({
    render: function() {
        ...
    }
});

CSの代替は、ネイティブエクスペリエンスです。

class App.Models.MyModel extends Backbone.Model
    render: ->
        ...

関数のオーバーライド関数 のオーバーライドなど、Backboneで頻繁に行ういくつかのことははるかに簡単になります。Javascriptの場合:

constructor: function ( attributes, options ) {
    this.constructor.__super__.constructor.apply( this, arguments );
    ...
}

になる:

constructor: (attributes, options) ->
    super

「this」コンテキストバインディング CSの「太い矢印」は、関数のコンテキストが「this」であることを宣言する必要がある場合に非常に便利です。

Javascriptは、関数がコールバックされるときに「this」を異なる方法で設定します。それを解決する方法はいくつかありますが、箱から出してすぐに、それは厄介です:

initialize: function() {
    this.model.bind('reset', this.render);
},

render: function () {
    this.$el.html("<ul></ul>");
    this.model.each(this.renderItem); // <--- Fails on "reset" because 'this' is wrong
    return this;
}

CoffeeScriptには、=>誰かによって呼び出されたときに関数に「this」を自動的にバインドするトークンがあります。

initialize: ->
    @model.bind 'reset', @render

render: =>
    @$el.html '<ul></ul>'
    @model.each @renderItem  # The fat arrow fixed it for you
    @

何と言っても、Backbone.jsコードは、CSで記述した場合、記述がはるかに簡単で、読み取りもはるかに簡単です。少なくとも、それは私の意見です。

幸運を!

于 2012-08-01T10:59:35.130 に答える
3

CoffeeScript と Backbone.js はどちらも同じ作者 (Jeremy Ashkenas) によって書かれました。backbone-on-rails gemはデフォルトで CoffeeScript を生成します。特定のプラグイン (あなたが言及した Backbone-relational など) は追加のセットアップが必要になる場合がありますが、Backbone 自体は CoffeeScript と非常にうまく連携します。

于 2012-07-31T15:47:04.140 に答える
2

CoffeeScript は、JavaScript 上の単なる構文レイヤーです。本質的には JavaScript です。JavaScript でできることはすべて、CoffeeScript で再現できます。

于 2012-07-31T14:23:04.090 に答える