如何从CoffeeScript重现正确的JavaScript对象文字属性是一个匿名函数?

时间:2012-05-04 02:25:18

标签: javascript syntax coffeescript

我有以下有效的javascript:

App.Person = DS.Model.extend({
firstName: DS.attr('string'),
lastName: DS.attr('string'),
birthday: DS.attr('date'),

fullName: function() {
    return this.get('firstName') + ' ' + this.get('lastName');
  }.property('firstName', 'lastName')
});

根据js2coffee.org这个js相当于以下咖啡脚本:

App.Person = DS.Model.extend(
  firstName: DS.attr("string")
  lastName: DS.attr("string")
  birthday: DS.attr("date")
  fullName: ->
    @get("firstName") + " " + @get("lastName")
  .property("firstName", "lastName")
)

然而,相同的咖啡脚本不会编译回有效的JavaScript。它甚至不是有效的咖啡脚本,因为它出现“意外”错误。 “

如何编写有效的Coffee脚本,以创建与上面列出的相同或语法相同的javascript?

2 个答案:

答案 0 :(得分:0)

Coffeescript:

App.Person = DS.Model.extend(
  firstName: DS.attr("string")
  lastName: DS.attr("string")
  birthday: DS.attr("date")
  fullName: ( ->
    @get("firstName") + " " + @get("lastName")
  ).property("firstName", "lastName")
)

编译为:

App.Person = DS.Model.extend({
  firstName: DS.attr("string"),
  lastName: DS.attr("string"),
  birthday: DS.attr("date"),
  fullName: (function() {
    return this.get("firstName") + " " + this.get("lastName");
  }).property("firstName", "lastName")
});

答案 1 :(得分:0)

无论如何都是这样的:

class App.Person extends DS.Model
    name: DS.attr

我知道它不适用于这种语法,但我想使用Coffee的类语法