2012-05-17 10 views
6

Quiero que una Vista se oculte durante la carga, y cuando un usuario hace clic en un enlace, se mostrará la vista. ¿Alguien puede revisar mi código y decirme qué he hecho mal?Cómo mostrar/ocultar una vista en EmberJS

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

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

Aquí es el jsFiddle: http://jsfiddle.net/stevenng/uxyrw/5/

+2

Podría creas un violín con tu código real? El bloque que pegaste parece incompleto. –

+0

Sin ver las plantillas, es decir, cómo se colocan las vistas en la página, es imposible depurarlas. Mi sugerencia sería agregar algunas declaraciones 'Em.Logger.log' en la función' click' (para asegurarse de que realmente se está llamando) y poner algo en las vistas para que no sean solo divs vacíos. Intenta editar este jsFiddle: http://jsfiddle.net/pjmorse/uxyrw/4/ – pjmorse

Respuesta

10

me gustaría crear un simple isVisibleBinding a la vista que desea ocultar/mostrar, ver http://jsfiddle.net/pangratz666/dTV6q/:

Manillar:

<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 acerca de sus convenciones de nomenclatura: clases deben ser nombrados y UpperCase casos lowerCase. Ver blog post sobre esto.

+0

Gracias por tu ayuda, Pangratz, otra pregunta rápida. Si el childView estaba en un {{each}} y generó muchos más childViews, ¿cómo apuntaría el botón mostrar/ocultar al específico seleccionado? – Steve

+2

Crearía un 'CollectionView' que '' itemViewClass' maneja el alternar de visibilidad. Ver http://jsfiddle.net/pangratz666/ZTdPF/. – pangratz

-1

Valuebinding por algunas razones no funcionó para mí, así la observación de la propiedad parentView dentro childView hizo el truco para mí

manillar:

<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' 
Cuestiones relacionadas