完整渲染DOM的聚合物1.0生命周期事件
Polymer 1.0 Lifecycle Event for Complete Rendered DOM
背景
我已经在Polymer公司工作了一段时间。我一直在从.5进行转换,并为生产应用程序构建新元素。我们目前使用的是Polymer 1.0.6,这个问题也使用jQuery 2.x.x和typeahead.js.
问题
我们有一个元素,它构建了一个由数据源提供的标签和输入的动态列表。在ready函数中,我们获得一个输入数据列表,并将其设置为一个本地列表变量,该变量绑定到foreach模板以创建标签和输入。
我找不到一个我真正喜欢的聚合物元素,用于打字,聚合物1.0。所以我默认使用typeahead.js。我的问题是,我找不到一个生命周期事件或解决方法,在dom处理完ready函数中的绑定列表设置后,调用typeahead函数。
代码
演示这个问题的最简单方法是在jsbin中创建一个严重的精简版本。我知道这个元素看起来很糟糕,为了演示我面临的核心问题,它被尽可能地减少了。
http://jsbin.com/zivano/edit?html,输出
我试过什么
我已经尝试使用附加的事件,虽然它在ready函数之后进行处理,但从ready开始的dom更改尚未生效。我在SO domReady vs ready-迁移到Polymer 1.0上发现了类似的问题。我尝试了这两个建议,第二个仍然在jsbin中使用,但没有成功。
我还将输入的点击事件绑定到了一个调用typeahead设置代码的函数,以证明如果在呈现dom之后进行调用,它将正确工作。
摘要
如果在ready函数中更新一个数据绑定的本地变量,我是否可以调用一个生命周期事件来保证这些dom更改将被呈现,这样我就可以对这些新项进行dom查询?或者,是否有一种解决方案可以让我在元素dom完全渲染后一次调用dom元素上的js函数?
我的问题是找不到生命周期事件或解决方法在dom处理完设置ready函数中的绑定列表。
我想我遇到了这样的问题。对于我的问题,我使用以下方法找到了解决方案:
var self = this;
window.addEventListener('WebComponentsReady', function(e) {
// imports are loaded and elements have been registered
/*Example*/
console.log('Components are ready');
var p = self.getElementsByTagName("paper-item");//paper-item created dynamically
console.log(p);//can access and use this paper-item
/*Finish example*/
//here you can call typeahead because the dom has been processed
});
对不起我的英语,或者如果我听不懂你的问题,我的英语不好。
我遇到的问题是,数据绑定列表是通过ajax函数填充的,该函数在附加函数之后完成,即使我在附加函数内部进行异步调用,它仍然会因为竞争条件而失败。
值得注意的是,弗拉维奥·奥乔亚的回答会奏效。我个人倾向于不让我的自定义元素向Window添加监听器。所以我走了另一条路。
由于我的问题是以保证绑定列表得到更新为前提的,所以我将ajax调用封装在Promise中,并将typeahead init逻辑添加到then语句中。这个解决方案似乎正在发挥作用。
我确实担心promise是否可以保证在处理then语句时绑定列表将传播到DOM。但到目前为止,它一直在发挥作用。如果我能证明不是这样的话,我会编辑这个答案。
- 组件生命周期问题/无法处理未定义的问题
- 渲染方法与生命周期方法中的React计算
- 注册后是否可以定义HTML5自定义元素中的生命周期回调
- 管理动态磁贴和应用程序生命周期
- 主干网的生命周期.js创建过程中的视图
- 使用Ember中的组件生命周期事件
- 关于Angular 1.5零部件生命周期挂钩
- 更新数据时的React.js生命周期
- 雷杜克斯.从容器组件描述表示组件的生命周期方法
- 增加服务工作线程的生命周期
- 是否有一种自动方法来确定(或查找)库的生命周期结束/支持终止通知
- 如何将请求生命周期事件封装在 happy.js 中
- 使用 Async.parallel 我的参数的生命周期不会超过使用 MongoDB 的 NodeJS 中的异步调用
- 聚合物元素注册和生命周期(创建和准备调用两次)
- E_UNKNOWN beforeCreate 和其他生命周期回调的响应错误
- Aurelia 组件生命周期中的远程服务
- 节点.js简单的 Web 服务器请求生命周期
- 角度引导程序生命周期:在完全加载后运行代码
- 主干提取集合生命周期,从响应设置属性
- JQuery 插件架构,用于定义对象和变量生命周期