将函数传递给Ember组件

时间:2015-07-02 19:03:16

标签: javascript ember.js

是否可以将功能传递给组件?我试图将我的代码从视图和组件中移开以保持我的Ember应用程序向前移动(请参阅here),并且我在我的网站中使用了一堆常用的函数。我不知道如何从组件中调用它们。我在旧代码中将它们放在自己的控制器中,但我听说将控制器传递给组件是不礼貌或不明智的。

例如,在组件手柄文件中,我考虑到这一点:

{{a-cool-component 
  property1=someValue
  function1=controllers.utils.doSomethingRepetitious 
}}

所以在我的组件javascript代码中我可以做这样的事情......

FacetListItemComponent = Ember['default'].Component.extend({
  property1: null
  property2: null
  function1: null 
  didInsertElement: function() {
    //... do stuff here
    this.set('property2', this.function1(this.get('property1')));
  }
);
exports['default'] = FacetListItemComponent;

我在构建的组件中尝试了它,但function1遇到了 undefined

有什么建议吗?

我在Ember-CLI 0.2.7上使用Ember 1.11

布赖恩

1 个答案:

答案 0 :(得分:1)

您应该使用get(),而不需要在组件上设置function1: null

//component
MyExComponent = Ember.Component.extend({
  didInsertElement: function(){
    var fun = this.get('function1');
    fun()
  }
})

//other component

MyOtherComponent = Ember.Component.extend({
  function1: function(){
    alert('hello');
  }
})

//other component template

{{my-ex
  function1=function1}}