2016-09-11 3 views
2

В Discourse Я хочу изменить метод _dock. Модифицирующий код будет размещен в плагине.Способ модификации в Ember Component

Вот короткий отрывок из этого файла:

export default Ember.Component.extend({ 
    elementId: 'topic-progress-wrapper', 
    classNameBindings: ['docked', 'hidden'], 

    ... 
    _dock() { 
    ... 
    }, 

}); 

Как изменить этот метод? Должен ли я повторно открыть этот компонент и что такое синтаксис для этого?

ответ

1

Посмотрите this и this руководство. Вам нужно создать новый компонент, что-то вроде этого:

// components/my-discourse-component.js 
import MyDiscourseComponent from 'discourse/components/topic-progress'; 

MyDiscourseComponent.extend({ 
    // Here you can extend the function. Don't forget 
    // this._super(...arguments) if you want to use the original function. 
}); 

MyDiscourseComponent.reopenClass({ 
    // Here you can completly override the function. 
}); 

export default MyDiscourseComponent; 

и просто использовать {{my-discourse-component}} в вашем temlate.

Или вы можете скопировать код аддона в mixin и просто расширить свой новый компонент с помощью этого mixin.

+0

Я думаю, что для моего случая reopenClass наиболее подходит. Но Ember Component привязан к 'elementId', что на самом деле является именем класса здесь? – megas

+0

classNames, classNameBindings и attributeBindings - это конкатенационные свойства в компонентах. Поэтому просто расширьте классNames или classNameBindings, и вы получите все классы из аддона и имен классов, которые вы определяете в своем компоненте. См. Это: http://emberjs.com/api/classes/Ember.Object.html#property_concatenatedProperties – lependu

+0

Но classNameBindings имеет массив из двух строк, каково имя компонента в точности? – megas

Смежные вопросы