【问题标题】:Extend ember class on condition有条件延长 ember 课程
【发布时间】:2017-03-05 10:49:34
【问题描述】:

是否可以根据条件扩展 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制作的所有类扩展

【问题讨论】:

  • 为什么不切换第一行和第二行?您想重新开设什么课程以及您的用例是什么?
  • @Keo 我已经更新了问题以澄清我的情况
  • Keo 的回答对您没有帮助吗? if (condition) { A.reopen({

标签: javascript class ember.js extends discourse


【解决方案1】:

看起来你想要在 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 的情况。

【讨论】:

  • 我正在从插件扩展 ember 类,我无法创建自己的抽象类
  • 介意用那一点更新您的问题吗?你是如何从插件扩展的? (我假设 ember cli 插件)
猜你喜欢
  • 2017-10-01
  • 1970-01-01
  • 2021-01-26
  • 2012-07-25
  • 1970-01-01
  • 1970-01-01
  • 2013-01-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多