如何将此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);
答案 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来查看此效果。