2014-07-14 7 views
0

Пожалуйста, посмотрите в этой http://emberjs.jsbin.com/ivOyiZa/1/editсвязь между несколькими компонентами EmberJs

Эта панель аккордеона позволяет открывать несколько панелей. Я хочу, чтобы аккордеон открывал только одну панель за раз. Если открыта панель и пользователь нажимает на другую панель, открытая панель должна быть закрыта перед открытием новой панели. Как это сделать?

Благодаря

+0

ИМХО это немного перебор, чтобы сделать компонент заголовок и тело, потому что создать отдельный вид и контроллеры для каждого. Я бы посоветовал вам вместо этого использовать частичные. – borisrorsvort

ответ

1

Here is the working demo.

Я добавил в настоящее время открыт emberAccordionItemView к EmberAccordionComponent. Я также добавил наблюдателя к emberAccordionItemView, чтобы автоматически закрыть все, что не является openedItemView.

App.EmberAccordionComponent = Ember.Component.extend({ 
    openedItemView: null, 
    emberAccordionItemView: Ember.View.extend({  
    expanded: false, 
    autoClose: function() { 
     if(this.get('parentView.openedItemView') !== this) { 
     this.set('expanded', false); 
     } 
    }.observes('parentView.openedItemView') 
    }) 
    .... 

Событие щелчок в EmberAccordionHeaderComponent Теперь устанавливает openedItemView к EmberAccordionComponent

App.EmberAccordionHeaderComponent = Ember.Component.extend({ 
    classNames: ['ember-accordion-header'], 
    click: function() { 
    this.set('parentView.parentView.openedItemView', this.get('parentView')); 

    // here we toggle the emberAccordionItemView.expanded property 
    this.toggleProperty('parentView.expanded'); 
    } 
}); 
Смежные вопросы