Ember.js:如何访问嵌套视图实例
Ember.js: How to access nested view instances
假设我正在定义嵌套视图,如下所示(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 创建的类,而不是实例,因此我无法访问这些属性。
是否有一种规范的方法可以从父视图的方法内部访问子视图的当前实例?
您可以将视图传递给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')
数组。
您可以使用
_childViews
数组:
console.log( this._childViews[0].get('value') );
或者你可以给你的视图一个id,然后简单地使用jQuery来访问相应的HTML元素。
{{#view childView id="childView"}}
console.log( Em.$('#childView')[0].value );
这其实很简单。
从 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
相关文章:
- 访问嵌套JSON对象的键,其中键是动态的
- 访问嵌套函数结构中的JavaScript父函数变量
- 如何使用其他地方指定的访问信息访问嵌套的json对象,而不使用eval或迭代
- 访问嵌套 json 对象的属性将返回未定义
- 从另一个(初学者内部)访问嵌套的javascript函数
- 如何使用替换器 param json.stringify 访问嵌套对象
- 循环访问嵌套的 JSON 数组
- 如何访问嵌套的表单ng包含范围/字段
- 访问嵌套对象中父对象的属性
- 聚合物数据绑定:如何访问嵌套模板中的数据
- 访问嵌套Polymer自定义元素中的JavaScript方法
- 在全局范围内访问嵌套变量的 Nodejs
- 访问嵌套在 YUI 代码块中的函数
- AngularJS - 如何访问嵌套ng-repeat中的数组
- D3 循环访问嵌套数据
- 如何访问嵌套的 iframe
- 访问嵌套函数中的 javascript 对象属性
- 如何在 JS 中循环访问嵌套对象
- 访问嵌套的 json 数组字段
- 使用 AngularJS 访问嵌套 JSON