gpt4 book ai didi

ember.js - Ember.CollectionView 所有 child didInsertElement 回调

转载 作者:行者123 更新时间:2023-12-02 05:58:18 35 4
gpt4 key购买 nike

从 Ember.CollectionView 是否有一种简单的方法可以在渲染完所有 childView 元素后调用一个函数?

像 didInsertElement 这样的东西适用于所有 child 。

这就是我现在正在做的。有没有更好的办法?

App.CollectionView = Ember.CollectionView.extend

didInsertChildElements: ( ->
if @get('childViews').everyProperty('state', 'inDOM')
@dosomething()
).observes('childViews')

itemViewClass: Ember.View.extend()

这里的编辑是我正在尝试做的一个更好的例子。

对于每个 ChildView,我使用 didInsertElement 设置位置,然后我想使用父级 didInsertElement 回调从父级滚动到指定的子级。问题是 parent 的 didInsertElement 回调在 child 的之前被调用。

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 中为 parentView 调用,或者由于 childViewsDidChange 将回调添加到“渲染”队列,它们被迫进入 DOM。

[] 改变时,你可能会做的是将你自己的回调添加到 afterRender 队列中( View 本身在这里充当数组,用于观察目的) ,此时任何非“inDOM” View 都将插入到 View 中。

didInsertChildElements: ( ->
if @get('state') === 'inDom'
Ember.run.scheduleOnce('afterRender', this, 'dosomething');
).observes('[]')

关于ember.js - Ember.CollectionView 所有 child didInsertElement 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15350894/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com