ember.js - Ember.CollectionView所有子元素didInsertElement回调

标签 ember.js

在渲染所有 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/

相关文章:

javascript - 如何从 ember 对象中获取数据

javascript - Foreach 与 promises javascript

javascript - 在 Ember Js 组件中定义转换 To

ruby-on-rails - Rails Ember 混合应用程序

web-applications - 根据grunt任务设置Env变量

ember.js - Emberjs 模板中的增量

ember.js - 如何使用 Ember.js 动态添加和删除 View

ember.js - ember 动态适配器主机更新

javascript - EmberJS : Has no method lastObject, 下一个对象

javascript - Ember 的模板渲染管道