18

そのようにネストされたビューを定義しているとしましょう(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で作成したクラスが返されるため、属性にアクセスできません。

親ビューのメソッド内から子ビューの現在のインスタンスにアクセスするための標準的な方法はありますか?

4

3 に答える 3

24

ビューに変数を渡し、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')アレイにアクセスすることもできます。

于 2012-05-01T07:39:33.793 に答える
2

_childViews配列を使用できます:

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

または、ビューにIDを指定し、jQueryを使用して対応するHTML要素にアクセスすることもできます。

{{#view childView id="childView"}}

console.log( Em.$('#childView')[0].value );
于 2012-04-30T20:48:47.487 に答える
0

実はとても簡単です。

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

于 2016-12-23T12:58:20.730 に答える