#javascript #class #ember.js #extends #discourse
#javascript #класс #ember.js #расширяет #обсуждение
Вопрос:
Возможно ли расширить класс 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.reopen({
if (condition) {
init: function() {
this.super();
// some functionality
}.on('didInsertElement'),
clear_up: function() {
// some stuff
}.on('willDestroyElement')
}
})
Все расширения класса сделаны в плагине для обсуждения
Комментарии:
1. Почему бы не переключить первую и вторую строку? Какой класс вы хотите повторно открыть и каков ваш вариант использования?
2. @Keo Я обновил вопрос, чтобы прояснить мой случай
3. Разве ответ Кео вам не помогает?
if (condition) { A.reopen({
Ответ №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 для одного и того же события.
Комментарии:
1. Я расширяю классы ember из плагина, я не могу создавать свои собственные классы, даже абстрактные
2. не возражаете обновить свой вопрос этим фрагментом? как вы расширяете плагин? (я полагаю, надстройка ember cli)