0

このJavaScriptをコーヒースクリプトに変換するにはどうすればよいですか?

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

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

これを試しましたが、ノックアウトjsバインディングが壊れます

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

4 に答える 4

4

これでうまくいきました。しかし、本当の解決策は-knockoutjsを学習するときにcoffeescriptを使用しないことだと思います

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

  ko.applyBindings(new AppViewModel)
于 2012-06-20T14:04:56.203 に答える
1

これは、CoffeeScript でオブジェクトを処理する方法とは異なります。あなたはおそらく次のようなことをしているはずです:

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

  ko.applyBindings(new AppViewModel())

チェックアウト: http://arcturo.github.com/library/coffeescript/index.htmlを参照してください。

于 2012-06-20T13:16:06.340 に答える
1

私はこれに何年も費やしました。紹介の例(および元の投稿)に似た方法から、「クラス」を使用した上記の方法に変更し、再び元に戻しました。壊れているのは、coffeescript によって生成されたリターンであり、非常に簡単な解決策があります。

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

最後に明示的に @ を返すことにより、すべての戻り値が修正されます。元の質問よりも 2 行多く含めました。元の関数のコンテキストで実行する必要があるため、計算されたものに => を使用することに注意してください。

于 2012-07-31T02:47:17.350 に答える
0

CoffeeScript バージョンでは、ko.applyBindings() を jQuery ドキュメントの一部として実行する準備ができています (その一部としてインデントされているため) が、元の JavaScript では ko.applyBindings() はその外部で発生しました。

ko.applyBindings(new AppViewModel()) 行を左端まで移動してみてください。

元のコードと新しいコードで生成された JavaScript を調べると、この効果を確認できます。

于 2012-06-20T12:45:08.773 に答える