0

如何将此 javascript 转换为咖啡脚本?

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

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

我试过了,但它破坏了 knockoutjs 绑定

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

  ko.applyBindings(new AppViewModel())

这是咖啡脚本产生的

(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

我花了很长时间在这上面。我将我的方法从类似于介绍示例(以及原始帖子)的方法更改为上面带有“类”的方法,然后再返回。打破的是咖啡脚本产生的回报,有一个非常简单的解决方案:

$ ->
    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 回答