CoffeeScript を使用して backbone.js アプリをコーディングすることに固有の問題はありますか? 修正できない問題に遭遇したり、特に厄介な回避策を使用しなければならなかったりしましたか?
3 に答える
本当に問題ありません。少なくとも、簡単に回避できないものはありません。
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で記述した場合、記述がはるかに簡単で、読み取りもはるかに簡単です。少なくとも、それは私の意見です。
幸運を!
CoffeeScript と Backbone.js はどちらも同じ作者 (Jeremy Ashkenas) によって書かれました。backbone-on-rails gemはデフォルトで CoffeeScript を生成します。特定のプラグイン (あなたが言及した Backbone-relational など) は追加のセットアップが必要になる場合がありますが、Backbone 自体は CoffeeScript と非常にうまく連携します。
CoffeeScript は、JavaScript 上の単なる構文レイヤーです。本質的には JavaScript です。JavaScript でできることはすべて、CoffeeScript で再現できます。