在咖啡脚本中调用函数定义的方法

Posted

技术标签:

【中文标题】在咖啡脚本中调用函数定义的方法【英文标题】:Calling a method on a function definition in coffeescript 【发布时间】:2012-01-17 21:09:37 【问题描述】:

你会如何将这个 javascript 的 sn-p 翻译成 coffeescript?具体来说,我正在努力解决如何在函数定义上调用.property()

MyApp.president = SC.Object.create(
  firstName: "Barack",
  lastName: "Obama",

  fullName: function() 
    return this.get('firstName') + ' ' + this.get('lastName');

    // Call this flag to mark the function as a property
  .property('firstName', 'lastName')
);

【问题讨论】:

良好的做法是声明您的属性依赖项。在你的情况下,你会做property('firstName', 'lastName')。如果您已声明您的依赖项,您还可以将您的属性设置为使用.cacheable() 进行缓存。 @Peter Wagenet - 好点,我为未来的搜索者更新了代码。 【参考方案1】:

这样的东西会起作用吗?

 (() => this.get("firstName") * this.get("lastName")).property()

【讨论】:

没有必要将胖箭头绑定到this。确实,这会造成伤害,因为它会绑定到声明范围,而不是对象本身。【参考方案2】:

我认为你应该这样写:

MyApp.president = SC.Object.create 
  firstName: "Barack",
  lastName: "Obama",
  fullName: (-> 
    return @get 'firstName' + ' ' + @get 'lastName'
    # Call this flag to mark the function as a property
  ).property('firstName', 'lastName')

checkout this link

【讨论】:

您的属性应该依赖于基础属性的更改,以便将计算属性绑定到任何更改。否则,当名字或姓氏发生变化时,全名将不再反映现实。我提交了修改... 这是生成的js代码: App.president = Ember.Object.create( name: "Barack Obama", firstName: "Barack", lastName: "Obama", fullName: (function( ) return "" + (this.get('firstName')) + " " + (this.get('lastName')); ).property('firstName', 'lastName') );当我在控制台中运行它时,我得到:“TypeError: App.president.fullName is not a function App.president.fullName() @0” @bonyiii 您不应该将其作为函数运行。您应该改用get('fullName')【参考方案3】:

有几种方法可以定义计算属性。以下是每个示例:

MyApp.president = Ember.Object.create
  firstName: "Barack"
  lastName: "Obama"
  fullName: (-> 
    @get 'firstName' + ' ' + @get 'lastName'
  ).property('firstName', 'lastName')

MyApp.president = Ember.Object.create
  firstName: "Barack"
  lastName: "Obama"
  fullName: Ember.computed(-> 
    @get 'firstName' + ' ' + @get 'lastName'
  ).property('firstName', 'lastName')

【讨论】:

最后的 .property() 调用是多余的。 我添加了依赖键。指定时它们不是多余的。【参考方案4】:

使用 Ember.computed 时,不需要调用 .property(),因此也可以使用此表单:

MyApp.president = Ember.Object.create
  firstName: "Barack"
  lastName: "Obama"
  fullName: Ember.computed -> @get 'firstName' + ' ' + @get 'lastName'

【讨论】:

以上是关于在咖啡脚本中调用函数定义的方法的主要内容,如果未能解决你的问题,请参考以下文章

咖啡脚本:使用“构造”字符串调用方法

咖啡脚本中的 switch case 语句

Unity3D中三种调用其他脚本函数的方法

freemarker中调用java方法,除了内建函数,自定义的怎么调用?

在一个python脚本中调用另一个python脚本中的函数

在 Apps 脚本中的自定义函数中,BigQuery 调用失败