emberjs ember bubbling javascript ember.js

javascript - bubbling - Ember.js: Cómo acceder a instancias de vista anidadas



ember on hover (3)

En realidad es bastante simple.

A partir de la versión 2.10.0, si está dentro de un componente y necesita encontrar un componente anidado, simplemente busque en:

const id = ''my-specific-id-im-looking-for'', views = this.get(''childViews''); let count = views.length; if (count) { while (--count) { if (views[count].get(''elementId'') === id) { // this is your view. do stuff with it, call methods on it, whatevs; break; } } }

Si es anterior a esto, intente usar el método del componente para forEachChildView

Digamos que estoy definiendo vistas anidadas, así ( ejemplo de código en JSFiddle ):

App.ParentView = Ember.View.extend({ ChildView: Ember.View.extend({ ... }), method: function() { this.get(''ChildView'') // => this is the class, not the instance :( } });​ {{#view App.ParentView}} {{#view ChildView}} ... {{/view}} {{/view}}

Me gustaría evitar vincular muchos atributos entre la vista principal y la vista secundaria. Más bien, me gustaría hacer algo como this.getPath(''ChildView.foo'') . Pero this.get(''ChildView'') devuelve la clase que creé con Ember.View.extend, no la instancia, por lo que no puedo acceder a los atributos.

¿Existe una forma canónica de acceder a la instancia actual de una vista secundaria desde un método de la vista principal?


Puede pasar una vista a la variable viewName y acceder a la vista a través del padre de esa manera.

Ver http://jsfiddle.net/Tx3NP/5/

{{#view App.ParentView}} {{#view childView viewName="childViewInstance"}} ... {{/view}} {{/view}} console.log(this.get(''childViewInstance.value''));

O puede hacer lo que recomienda @weltraumpirat y acceder a la matriz this.get(''childViews'') .


Puede utilizar la matriz _childViews :

console.log( this._childViews[0].get(''value'') );

o puede asignar a su vista una identificación y simplemente usar jQuery para acceder al elemento HTML correspondiente.

{{#view childView id="childView"}} console.log( Em.$(''#childView'')[0].value );