EmberJS视图-检测是否所有子视图都已渲染
EmberJS View - detect if all children views have been rendered
场景:
- 呈现笔记集合(异步加载(
- 两个视图:表示注释列表的NoteView和表示单个注释的NoteOnListView
- 我必须运行一些代码(mastery.js(来放置它们,但它需要首先呈现所有笔记,它需要知道这些孩子的数量和属性
我有一个模板,notes.hjs:
{{#each note in controller}}
{{view App.NoteOnListView}}
{{/each}}
和视图:
App.NotesView = Ember.View.extend({
didInsertElement: function() {
console.log('the list has been rendered');
}
});
App.NoteOnListView = Ember.View.extend({
didInsertElement: function() {
console.log('a note has been inserted');
},
afterRender: function() {
console.log('a note has been rendered');
}
});
控制台输出:
the list has been rendered
XHR finished loading: "http://localhost:3000/notes"
a note has been rendered
a note has been inserted
a note has been rendered
a note has been inserted
// ...
a note has been rendered
a note has been inserted
// This is where I need to run code!
我对这个问题有一些可能的解决方案,但所有的方案看起来都很粗糙。有没有一种好的方法可以告诉NotesView等待它的所有子项都被渲染?
如果您将策略更改为子类化Ember.CollectionView,则可以使用以下方法来接收子视图已完成渲染的通知。
App.CV = Ember.CollectionView.extend( {
itemViewClass : Ember.View.extend( {
templateName : 'item'
} ),
onChildViewsChanged : function( obj, key ){
var length = this.get( 'childViews.length' );
if( length > 0 ){
Ember.run.scheduleOnce( 'afterRender', this, 'childViewsDidRender' );
}
}.observes( 'childViews' ),
childViewsDidRender : function(){
//child views have finished rendering!
}
} );
下面是一个在Ember1.0RC2中演示此技术的示例。
有关Ember.run.scheduleOnce的更多信息,请参阅文档。
相关文章:
- 在IE9中未检测到视图模型函数绑定,但在FF和Chrome中有效
- 如何检测一个数据角色=“页面”中对特定列表视图项的单击,并在另一个数据上显示相应的数据
- 父页面中的 JQuery 未在部分视图中检测到 id 元素
- 检测网站是在应用的 Android 浏览器还是网页视图中运行
- 检测所有图像何时加载到角度.js视图中
- 如何在 Javascript Metro 应用程序中检测列表视图中项目的右键单击
- 角度重定向到其他方式而不检测视图,但当我单击后退按钮时它可以工作
- 如何检测添加到剑道窗口的视图上的单击或单击事件
- 尝试检测网格视图的哪一行处于编辑模式,然后在选中复选框字段时调整文本框
- 检测视图模型属性是否在不刷新的情况下发生更改
- Fullcalendar检测右键单击议程视图上的空时段
- AngularJS指令用于用户协议视图,检测启用按钮,不适用于移动safari
- jQuery JavaScript在视图/窗口中检测对象
- Jquery Mobile检测在列表视图中单击了哪一行
- 检测另一个视图何时被触摸-在react native中使用PanResponder拖动
- 如何在JavaScript中检测是否在Chrome网络视图中加载了页面
- 在视图中检测动画元素
- 对于opera mini,使用javascript检测移动视图是否打开或关闭
- MVC4视图未检测到JQuery
- EmberJS视图-检测是否所有子视图都已渲染