2012-06-20 83 views
0

如何將此javascript轉換爲coffeescript?knockoutjs javascript into coffeescript

$(function() { 
    function AppViewModel() { 
    this.firstName = ko.observable(); 
    } 

    ko.applyBindings(new AppViewModel()); 
}); 

我試過,但它打破了knockoutjs綁定

jQuery -> 
    AppViewModel = -> 
    this.firstName = ko.observable("something") 

    ko.applyBindings(new AppViewModel()) 

這裏就是CoffeeScript的生產

(function() { 

    jQuery(function() { 
    var ViewModel; 
    ViewModel = function() { 
     return this.firstName = ko.observable(); 
    }; 
    return ko.applyBindings(new ViewModel()); 
    }); 

}).call(this); 

回答

4

這個技巧。但我認爲真正的解決方案是 - 在學習基因敲除時不要使用咖啡標記

jQuery -> 
    class AppViewModel 
    firstName : ko.observable() 

    ko.applyBindings(new AppViewModel) 
+0

gah,它是縮進錯誤。修正。 – Brand

0

在你作出ko.applyBindings的CoffeeScript的版本()發生的的一部分準備好了jQuery文檔(因爲它是縮進的一部分),而在原始JavaScript中,ko.applyBindings()發生在它之外。

嘗試將ko.applyBindings(新的AppViewModel())一直移動到左側。

您可以通過在您的原始代碼和新代碼中查找生成的JavaScript來查看效果。

+0

對不起,這是代碼中的一個錯誤:( – Brand

+0

明白了,仍然,你看到生成的CoffeeScript和原來的JavaScript之間有什麼區別嗎? –

+0

實際上是!Coffeescript在'this.firstName'和'任何方式來防止這種情況? – Brand

1

我花了很多時間。我將我的方法從引入示例(和原始帖子)類似的內容改爲上面的「類」,然後再回來。什麼是破是由CoffeeScript中產生的回報,有一個非常簡單的解決方案:

$ -> 
    AppViewModel = -> 
     @firstname = ko.observable 'andrew' 
     @lastname = ko.observable 'plumdog' 
     @fullname = ko.computed => 
      @firstname() + ' ' + @lastname() 
     @ 

通過在年底明確返回@,任何的回報是固定的。我還包含了比原始問題多兩行,請注意=>用於計算,因爲這些需要在原始函數的上下文中運行。