【问题标题】:Ember.js (RC1) CollectionView.didInsertElement fired too earlyEmber.js (RC1) CollectionView.didInsertElement 过早触发
【发布时间】:2013-03-06 03:53:16
【问题描述】:

我正在使用扩展的Ember.CollectionView 和一大群孩子。在所有孩子都呈现后,我需要执行一些由 jQuery 插件处理的样式化 javascript。我的第一次尝试是利用我熟悉和喜爱的 didInsertElement 钩子,但对于我的目的来说,这个钩子似乎启动得太早了。

根据文档here,这个钩子在什么时候被触发

当视图的元素被插入到 DOM 时调用。覆盖此函数以执行任何需要文档正文中的元素的设置。

因此,也许我对 Ember 的渲染方式存在误解,但由此看来我的方法应该可行。

我遇到错误了吗?这是我误解的正确功能吗?除了在每个子视图触发didInsertElement 时使用带有回调的签入样式系统来提醒我之外,还有其他规范的解决方法吗?

编辑 作为记录,使用签到系统确实有效。每次父 didInsertElement 被解雇时,我都会计算哪些子视图签入,但我想知道是否有更好的方法。

【问题讨论】:

    标签: javascript ember.js


    【解决方案1】:

    从技术上讲,CollectionView 是在其子项之前插入的,所以是的,这是正确的功能。 要在 CollectionView 的所有子项都已呈现时添加回调,您需要使用 afterRender 队列。

    App.ContainerView = Ember.ContainerView.extend({
      didInsertElement: function() {
        Ember.run.scheduleOnce('afterRender', this, function(){
          // this will be performed after every child has been rendered
        });
      }
    })
    

    【讨论】:

    • 感谢您的回答。不幸的是,afterRender 队列似乎也没有像我们希望的那样工作。我从父视图上的 didInsertElement、afterRender 队列和子视图上的 didInsertElement 设置日志记录,这就是我在日志中看到的内容:gist.github.com/grep-awesome/5099953。它显示了在任何子视图呈现之前发生的 afterRender 调用
    • 你是在异步加载集合视图后面的 Array 的内容吗?
    • 我感觉有点像个傻瓜......是的,是的,我正在异步加载它。所以我接受这个,从我原来的问题的范围来看,这就是答案。谢谢
    猜你喜欢
    • 2014-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-01
    • 1970-01-01
    • 2019-10-17
    • 2012-11-29
    相关资源
    最近更新 更多