假设我正在 Ember 中创建一个可重用的组件,并且我想要一个辅助函数来调用其中定义的另一个辅助函数。例如,
App.SomeCoolComponent = Ember.Component.extend
offset: 50
position: (x) -> x * 100
offsetPosition: # would like (x) -> position(x) + offset
因此,从概念上讲,返回一个函数,该函数将评估 x 处的位置、添加偏移量并返回值。显然这是一个愚蠢的例子,我可以offSetPosition
不调用就直接编写position
,但是在重复代码的更复杂的场景中。问题是我不知道如何让它工作。我试过
offsetPosition: (x) -> @get('position')(x) + @get('offset')
失败是因为@get
没有在函数中定义,它有错误的范围。我试图Ember.computed
在不同的地方插入类似的东西也没有运气,例如以下也不起作用:
offsetPosition: Ember.computed(->
(x) -> @get('position')(x) + @get('offset')).property('position', 'offset')
这样做的正确方法是什么?
Ember 版本 1.3.0-beta.1+canary.48513b24。提前致谢!
编辑:似乎我的问题源于将函数传递给 d3 调用。例如:
App.SomeCoolComponent = Ember.Component.extend
offset: 50
position: (d, i) -> i * 100
offsetPosition: (d, i) ->
@position(d, i) + @get('offset')
# Some other code not shown
didInsertElement: ->
data = [1, 2, 3]
i = 1
d = data[i]
console.log(@position(d, i)) # works
console.log(@offsetPosition(d, i)) # works
d3.select('svg').selectAll('circle').data(data).enter().append('circle')
.attr('cx', @position) # works
.attr('cy', @offsetPosition) # fails
.attr('r', 30)
错误信息是Uncaught TypeError: Object #<SVGCircleElement> has no method 'position'
关于如何解决这个问题的任何想法?