首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Ember.js:如何访问嵌套视图实例

Ember.js:如何访问嵌套视图实例
EN

Stack Overflow用户
提问于 2012-05-01 04:11:04
回答 2查看 8.4K关注 0票数 18

假设我正在定义嵌套视图,比如(code example on JSFiddle):

代码语言:javascript
复制
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创建的类,而不是实例,所以我不能访问属性。

有没有一种从父视图的方法内部访问子视图的当前实例的规范方法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-01 15:39:34

您可以向视图传递viewName变量,并以这种方式通过父视图访问该视图。

请参阅http://jsfiddle.net/Tx3NP/5/

代码语言:javascript
复制
{{#view App.ParentView}}
  {{#view childView viewName="childViewInstance"}}
     ...
  {{/view}}
{{/view}}
console.log(this.get('childViewInstance.value'));

或者,您也可以按照@weltraumpirat的建议进行操作并访问this.get('childViews')阵列。

票数 24
EN

Stack Overflow用户

发布于 2016-12-23 20:58:21

这实际上很简单。

从2.10.0开始,如果您在一个组件中,并且需要查找一个嵌套的组件,那么只需搜索:

代码语言:javascript
复制
  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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10389947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档