2012-05-17 14 views
6

Desidero che una vista sia nascosta al caricamento, quindi quando un utente fa clic su un collegamento verrà visualizzata la vista. Qualcuno può rivedere il mio codice e farmi sapere cosa ho fatto di sbagliato?Come mostrare/nascondere una vista in EmberJS

App.parentView = Em.View.extend({ 
    click: function() { 
    App.childView.set('isVisible', true); 
    } 
}); 

App.childView = Em.View.extend({ 
    isVisible: false 
}); 

Ecco la jsfiddle: http://jsfiddle.net/stevenng/uxyrw/5/

+2

Could crei un violino con il tuo codice attuale? Il blocco che hai incollato sembra incompleto. –

+0

Senza vedere i modelli, cioè come vengono posizionati i Visualizzazioni sulla pagina, è impossibile eseguire il debug. Il mio suggerimento sarebbe aggiungere alcune istruzioni 'Em.Logger.log' nella funzione' click' (per assicurarsi che venga effettivamente chiamato) e in effetti mettere qualcosa nelle viste in modo che non siano solo div vuote. Prova a modificare questo jsFiddle: http://jsfiddle.net/pjmorse/uxyrw/4/ – pjmorse

risposta

10

vorrei creare un semplice isVisibleBinding alla vista che si desidera nascondere/mostrare, vedi http://jsfiddle.net/pangratz666/dTV6q/:

Manubrio:

<script type="text/x-handlebars" > 
    {{#view App.ParentView}} 
     <h1>Parent</h1> 
     <div> 
      <a href="#" {{action "toggle"}}>hide/show</a> 
     </div>  
     {{#view App.ChildView isVisibleBinding="isChildVisible" }} 
      {{view Em.TextArea rows="2" cols="20"}} 
     {{/view}}   
    {{/view}} 
</script>​ 

JavaScript:

App.ParentView = Em.View.extend({ 
    isChildVisible: true, 

    toggle: function(){ 
     this.toggleProperty('isChildVisible'); 
    } 
}); 

App.ChildView = Ember.View.extend(); 

Una nota sui tuoi convenzioni di denominazione: classi dovrebbero essere denominati UpperCase e le istanze lowerCase. Vedi blog post su questo.

+0

Grazie per il tuo aiuto Pangratz, un'altra domanda veloce. Se childView era in {{each}} e ha generato molte più childViews, come avrei indirizzato la visualizzazione/nascondi a quella selezionata? – Steve

+2

Vorrei creare un 'CollectionView' che 'itemViewClass' gestisce la commutazione della visibilità. Vedi http://jsfiddle.net/pangratz666/ZTdPF/. – pangratz

-1

valuebinding per alcuni motivi non ha funzionato per me così osservare proprietà parentView all'interno childView ha fatto il trucco per me

manubrio:

<script type="text/x-handlebars" > 
    {{#view App.ParentView}} 
     <h1>Parent</h1> 
     <div> 
      <a href="#" {{action "toggle"}}>hide/show</a> 
     </div>  
     {{#view App.ChildView }} 
      {{view Em.TextArea rows="2" cols="20"}} 
     {{/view}}   
    {{/view}} 
</script>​ 

CoffeeScript:

App.ParentView = Em.View.extend 
    isChildVisible: true 
    toggle: -> 
    @toggleProperty 'isChildVisible' 
App.ChildView = Em.View.extend 
    isVisible: (-> 
    @get('parentView.isChildVisible') 
).property '_parentView.isChildVisible'