knockoutjs javascript into coffeescript

时间:2012-06-20 12:37:19

标签: javascript knockout.js coffeescript

如何将此javascript变成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 个答案:

答案 0 :(得分:4)

这就是诀窍。但我认为真正的解决方案是 - 在学习knockoutjs时不要使用coffeescript

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

  ko.applyBindings(new AppViewModel)

答案 1 :(得分:1)

这不是你在CoffeeScript中做对象的方式。你应该做的事情可能是:

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

  ko.applyBindings(new AppViewModel())

结帐:http://arcturo.github.com/library/coffeescript/index.html以获得良好的参考。

答案 2 :(得分:1)

我花了很多年的时间。我将我的方法从类似于引言示例(和原始帖子)的方法更改为上面的“类”,然后再返回。什么是破坏是由coffeescript产生的回报,并有一个非常简单的解决方案:

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

通过在结尾显式返回@,任何返回都是固定的。我包括比原始问题多2行,请注意使用=>因为这些需要在原始函数的上下文中运行。

答案 3 :(得分:0)

在CoffeeScript版本中,你使ko.applyBindings()作为jQuery文档的一部分发生(因为它是缩进的一部分),而在原始的JavaScript中,ko.applyBindings()发生在它之外。

尝试将ko.applyBindings(新的AppViewModel())行一直移到左侧。

您可以通过在原始代码和新代码中查看生成的JavaScript来查看此效果。