在条件上延长余烬类

时间:2016-10-23 16:37:48

标签: javascript class ember.js extends discourse

是否可以在条件下延长Ember课程?像这样:

A.reopen({
  if (condition) {
    init: function() {
      this.super();
      // some functionality
    }.on('didInsertElement');
  }
})

目前我有这样的模式:

A.reopen({
  init: function() {
    this.super();
    if (condition) {
      // some stuff
    }
  }.on('didInsertElement'),

  cleanup: function() {
    if (condition) {
      // some stuff
    }
  }.on('willDestroyElement')
})

我猜想是否可以扩展A类,条件是我可以像这样简化我的模式:

A.reopen({
  if (condition) {
    init: function() {
      this.super();
      // some functionality
    }.on('didInsertElement'),

    clear_up: function() {
      // some stuff
    }.on('willDestroyElement')
  }
})

discourse

插件中的所有类扩展

1 个答案:

答案 0 :(得分:0)

看起来你想要将Java中的内容称为抽象类。

Ember.Component.extend({ // abstract class

  doSomeInit: Ember.K,

  doSomeCleaning: Ember.K,

  didInsertElement: function() {
    this.super(..arguments);
    this.doSomeInit();
  },

  willDestroyElement: function() {
    this.doSomeCleaning();
  }
})

// class A
Ember.Component.extend(MyIncompleteClass, {

  doSomeInit: function() { /* etc */ },

  doSomeCleaning: function() { /* etc */ }

});

// class B
Ember.Component.extend(MyIncompleteClass, {

  doSomeInit: function() { /* etc */ },

  doSomeCleaning: function() { /* etc */ }

});

旁注:最好覆盖生命周期钩子而不是使用Ember.on,以保证执行顺序;对于同一事件,就多个Ember.on而言。