在渲染所有 childView 元素后,从 Ember.CollectionView 是否有一种简单的方法来调用函数?
类似于所有子项的 didInsertElement 之类的东西。
这就是我现在正在做的事情。有更好的办法吗?
App.CollectionView = Ember.CollectionView.extend
didInsertChildElements: ( ->
if @get('childViews').everyProperty('state', 'inDOM')
@dosomething()
).observes('childViews')
itemViewClass: Ember.View.extend()
编辑这里是我正在尝试做的事情的一个更好的例子。
对于每个 ChildView,我使用 didInsertElement 设置位置,然后从父 View 中使用父 View didInsertElement 回调滚动到指定的 subview 。问题是父级的 didInsertElement 回调在子级的回调之前被调用。
App.CollectionView = Ember.CollectionView.extend
dateBinding: 'controller.date'
didInsertElement: ->
#@scrollTo @get('date')#old way
Ember.run.scheduleOnce('afterRender', @, 'scrollToDate')
scrollToDate: ->
@scrollTo @get('date')
scrollTo: (date) ->
day = @get('childViews').findProperty('date', date)
pos = day.get('position')
#console.log pos
@$().scrollTop(pos)
itemViewClass: Ember.View.extend
templateName: 'home/day'
dateBinding: 'content.date'
position: null
didInsertElement: ->
@set 'position', @$().offset().top
#console.log @get('position')
编辑
安排 afterRender 回调有效! Ember.run.scheduleOnce('afterRender', @, 'scrollToDate')
最佳答案
对于每个 ContainerView, subview 进入 dom 的方式有两种:当父 View render() 时,它们与父 View 本身一起插入,在这种情况下,当 didInsertElement 为 DOM 时,它们将位于 DOM 中为parentView调用,或者由于childViewsDidChange向“渲染”队列添加回调而强制进入DOM。
然后,当 []
发生变化时,您可以将自己的回调添加到 afterRender
队列中(出于观察目的, View 本身充当此处的数组) ,此时任何非“inDOM” View 都将被插入到 View 中。
didInsertChildElements: ( ->
if @get('state') === 'inDom'
Ember.run.scheduleOnce('afterRender', this, 'dosomething');
).observes('[]')
关于ember.js - Ember.CollectionView所有子元素didInsertElement回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15350894/