2016-05-19 10 views
0

ich eine Komponente app/components/haben Angebots listing.js:Ember 2 - ein-/ausblenden Inhaltskomponente

import Ember from 'ember'; 

export default Ember.Component.extend({ 
    isOfferShowing: false, 
    actions: { 
    offerShow() { 
     if (this.get('isOfferShowing')) { 
     this.set('isOfferShowing', false); 
     } else { 
     this.set('isOfferShowing', true); 
     } 
    } 
    } 
}); 

und seine Vorlage app/templates/components/Angebot-listing.hbs :

<div class="offer__container"> 
    <div class="row"> 
    <div class="gr-3"> 
     <div class="offer__avatar" style="background-image: url('{{ offer.avatar }}')"></div> 
    </div> 
    <div class="gr-9"> 
     <div class="offer__name" {{action "offerShow"}}>{{ offer.firstname }} {{ offer.lastname }}</div> 
     <div class="offer__age" {{action "offerShow"}}>{{ offer.age }} ans</div> 
     {{#if isOfferShowing}} 
     <div class="offer__description" {{action "offerShow"}}>{{offer.description}}</div> 
     {{else}} 
     <div class="offer__description" {{action "offerShow"}}>{{word-limit offer.description 50}}</div> 
     {{/if}} 

     {{#if isOfferShowing}} 
     <div class="+spacer"></div> 
     <a class="offer__button"><i class="fa fa-envelope"></i> Contacter par email</a> 
     <a class="offer__button"><i class="fa fa-phone"></i> Voir le numéro de téléphone</a> 
     {{/if}} 
    </div> 
    </div> 
</div> 

die in app/templates/index.hbs wiedergegeben wird:

{{#each model as |offerUnit|}} 
    {{offer-listing offer=offerUnit}} 
{{/each}} 

Das Beispiel funktioniert gut, aber ich würde gerne alle "mehr" Inhalt ausblenden, wenn ein neues angezeigt wird.

+0

Was meinst du genau mit "verstecken jeden" mehr "Inhalt, wenn ein neuer" zeigt? –

+0

https://dl.dropboxusercontent.com/u/58469525/stackoverflow/ember-show-hide.png - Wie Sie sehen können, wenn wir auf den Text klicken, werden die Call Actions Buttons angezeigt. Ich hätte gerne nur eine zu der Zeit geöffnet. –

+0

Ok ich verstehe besser was du brauchst. Bitte sehen Sie meine Antworten. –

Antwort

2

Eine Arbeitslösung hierfür finden Sie hier: Using Ember component's methods inside template

Grundsätzlich entweder Sie halten einen Verweis auf das ausgewählte Element in Ihrem Controller und übergeben es an jedem Ihrer offer-listing Komponenten. Auf diese Weise könnten sie sich mit diesem Hinweis auf Bekannte vergleichen, wenn sie angezeigt werden müssen oder nicht.

Oder Sie setzen eine Flagge in jedem Ihrer offer Modell je nachdem, ob angezeigt werden muss oder nicht.

+0

Was ist Ihrer Meinung nach die beste Lösung? –

+0

Ich persönlich mag die zweite, weil sie meine Vorlagen sauber hält. –

+0

Also am ende habe ich einen modellwert '' 'offer.isShowing''', ich injiziere in meiner komponente den store-service, wenn wir auf ein angebot klicken, schleife ich jedes objekt aus dem lokalen store (peekAll) , Setze ich sie auf "falsch" und setze den aktuellen auf "wahr". Klingt das richtig für dich? –