Ember.js: как получить доступ к вложенным экземплярам просмотра
Скажем, я определяю вложенные представления, например (пример кода на 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}}
Я бы хотел избежать связывания множества атрибутов между родительским представлением и дочерним представлением. Скорее, я хотел бы сделать что-то вроде this.getPath('ChildView.foo')
. Но this.get('ChildView')
возвращает класс, который я создал с помощью Ember.View.extend, а не экземпляр, поэтому я не могу получить доступ к атрибутам.
Есть ли канонический способ доступа к текущему экземпляру дочернего представления из метода родительского представления?
Ответы
Ответ 1
Вы можете передать представление переменной viewName
и получить доступ к представлению через родителя таким образом.
См. http://jsfiddle.net/Tx3NP/5/
{{#view App.ParentView}}
{{#view childView viewName="childViewInstance"}}
...
{{/view}}
{{/view}}
console.log(this.get('childViewInstance.value'));
Или вы можете это сделать, поскольку @weltraumpirat рекомендует и получает доступ к массиву this.get('childViews')
.
Ответ 2
Вы можете использовать массив _childViews
:
console.log( this._childViews[0].get('value') );
или вы можете дать вашему представлению id и просто использовать jQuery для доступа к соответствующему элементу HTML.
{{#view childView id="childView"}}
console.log( Em.$('#childView')[0].value );
Ответ 3
На самом деле это довольно просто.
Начиная с версии 2.10.0, если вы находитесь внутри компонента и вам нужно найти вложенный компонент, просто выполните поиск через:
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;
}
}
}
Если вы до этого, попробуйте использовать компонентный метод forEachChildView