在咖啡脚本中调用函数定义的方法
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 functionApp.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'
【讨论】:
以上是关于在咖啡脚本中调用函数定义的方法的主要内容,如果未能解决你的问题,请参考以下文章