如何调用emberjs函数?

时间:2016-08-26 20:56:42

标签: ember.js

我想了解如何调用插件中的函数。

以下是discourse-adplugin

的代码段
export default Ember.Component.extend({
  ...
  _initGoogleDFP: function() {
    var self = this;
    loadGoogle(this.siteSettings).then(function() {
      ...
    });
  }.on('didInsertElement'),
  ...
});

没有提到_initGoogleDFP函数显然是有人调用的,但它以某种方式从emberjs的内容调用。

初始化emberjs组件的原则是什么? _initGoogleDFP如何调用emberjs

1 个答案:

答案 0 :(得分:2)

Ember.on函数(或Function.prototype.on)返回一个特殊函数,其中包含一些Ember实现细节:

export default Ember.Component.extend({
  ...
  _initGoogleDFP: <some-special-function-object>,
  ...
});

Ember迭代你的类定义中的键,寻找这些特殊对象,并最终调用Ember.addListener('didInsertElement', yourFunction)

通常应避免使用.on。这令人困惑。如果您有两个.on('didInsertElement'),那么它们会以何种顺序被调用?谁知道呢。

编写代码的首选方法是覆盖didInsertElement

export default Ember.Component.extend({
  ...
  didInsertElement() {
    this._super(...arguments);

    var self = this;
    loadGoogle(this.siteSettings).then(function() {
      ...
    });
  }
  ...
});

如果您需要从其他地方拨打_initGoogleDFP,请将其设为功能,然后您可以从didInsertElement拨打电话:

export default Ember.Component.extend({
  ...
  _initGoogleDFP: function() {
    var self = this;
    loadGoogle(this.siteSettings).then(function() {
      ...
    });
  },

  didInsertElement() {
    this._super(...arguments);
    this._initGoogleDFP();
  }
  ...
});