2012-07-31 53 views

回答

2

CoffeeScript只是JavaScript上的一個語法層。它本質上是JavaScript。你可以在JavaScript中做任何事情,你可以在CoffeeScript中重現。

+0

參見例如https://github.com/PaulUithol/Backbone-relational/issues/91。我想知道CoffeeScript和主幹集成是否還有其他問題。 – ipavlic 2012-07-31 14:25:48

3

CoffeeScript和Backbone.js都是由同一作者(Jeremy Ashkenas)編寫的。 backbone-on-rails gem默認生成CoffeeScript。雖然某些插件(例如您提到的Backbone-relational)可能需要額外的設置,但Backbone本身與CoffeeScript搭配非常好。

6

沒問題,真的。至少,沒有哪個不容易解決。

使用CS的問題是你可能會在任何地方使用CS相同的問題:

  • 調試是在生成的JS
  • CS還是做需要一個預處理步驟,可以是有時尷尬
  • 你的團隊的其餘部分可能不知道CS
  • 大約有CS一些奇怪的事情(他們引入「類」,但他們不是真正的類)

此外,由於具有Coffeescript的Backbone dev是基於「class」的,因此您會發現自己希望將您的課程分爲單獨的文件夾和單獨的文件夾。正因爲如此,你可能會陷入這樣一種情況,那就是這些課程無序定義。例如,你的集合可能在你的模型之前被定義,這是不可能發生的。爲此,我建議使用可以管理依賴關係(導入)的東西。我使用coffee-toaster,但還有其他幾個選項(例如,Rails具有內置到資產管道的依賴管理)

這是我首選編寫Backbone代碼的方式。在我看來,BackScript.js開發在CoffeeScript中比在Javascript中更好。對我而言,他們像巧克力和花生醬一起走到一起。 (不是每個人都喜歡巧克力/花生醬......並不是所有人都喜歡BB/CS)

類語義 骨幹的發展在很大程度上依賴於擴大原型,這是內置有CoffeeScript的東西。所以,在這裏,你會在JS擴展視圖:

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

的CS替代是土生土長的經驗:

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

重寫功能 有的東西你在骨幹經常做,像重載函數變爲更簡單。在Javascript:

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

變爲:

constructor: (attributes, options) -> 
    super 

當你需要聲明「此」語境中的CS綁定 「胖箭頭」是真正有用的一個功能的情況下是「這「

當函數被回調時,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有=>令牌時它就會被人稱爲將自動綁定「這個」的功能:

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

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

當所有事情都說完之後,Backbone.js代碼更容易編寫,並且在使用CS編寫時更容易閱讀。至少,這是我的看法。

祝你好運!

相關問題