Javascript 根据条件扩展余烬类
有可能在条件允许的情况下延长余烬等级吗?大概是这样的:Javascript 根据条件扩展余烬类,javascript,class,ember.js,extends,discourse,Javascript,Class,Ember.js,Extends,Discourse,有可能在条件允许的情况下延长余烬等级吗?大概是这样的: A.reopen({ if (condition) { init: function() { this.super(); // some functionality }.on('didInsertElement'); } }) A.reopen({ if (condition) { init: function() { this.super(); // s
A.reopen({
if (condition) {
init: function() {
this.super();
// some functionality
}.on('didInsertElement');
}
})
A.reopen({
if (condition) {
init: function() {
this.super();
// some functionality
}.on('didInsertElement'),
clear_up: function() {
// some stuff
}.on('willDestroyElement')
}
})
目前我有这样的模式:
A.reopen({
init: function() {
this.super();
if (condition) {
// some stuff
}
}.on('didInsertElement'),
cleanup: function() {
if (condition) {
// some stuff
}
}.on('willDestroyElement')
})
我猜如果我可以扩展一个类,条件是我可以像这样简化我的模式:
A.reopen({
if (condition) {
init: function() {
this.super();
// some functionality
}.on('didInsertElement');
}
})
A.reopen({
if (condition) {
init: function() {
this.super();
// some functionality
}.on('didInsertElement'),
clear_up: function() {
// some stuff
}.on('willDestroyElement')
}
})
在插件中为创建的所有类扩展看起来您想要的是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的情况下。看起来您想要的是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的情况下。为什么不切换第一行和第二行?你想重新打开哪个类,你的用例是什么?@Keo我已经更新了问题以澄清我的案例Keo的答案对你没有帮助吗<代码>如果(条件){A.重新打开({为什么不切换第一行和第二行?你想重新打开哪个类,你的用例是什么?@Keo我更新了问题以澄清我的案例Keo的答案对你没有帮助吗?
如果(条件){A.重新打开({
我正在从插件扩展ember类,我无法创建自己的类,甚至不能用那个位更新你的问题?你是如何从插件扩展的?(我想是ember cli插件)我正在从插件扩展ember类,我无法创建自己的类,甚至不能用那个位更新你的问题?你是如何从插件扩展的?(我想是ember cli插件)