我有一个有效的Polymer原型,其代码片段是:
Polymer({
myData: [],
observe:{
myData: 'myDataChange'
},
myDataChange: function(val, newVal){ ... }
...
但是,在attribute hinting section of the developer API下,它指出应该在创建的生命周期回调中初始化对象和数组,而不是在原型上。所以,我将上面的代码段更改为:
Polymer({
created: function(){
this.myData = [];
},
observe:{
myData: 'myDataChange'
},
myDataChange: function(val, newVal){ ... }
...
一旦我做出这个改变,改变观察者功能就不会长时间调用。
我的元素实例的myData属性由文档就绪回调中的jQuery填充。将此代码移动到包含页面上的“聚合物就绪”回调中可以解决此问题。
我对此的担忧是,我的网页将会出现针对初始数据填充的聚合物就绪事件。
我修改了我的原型,以便在聚合物就绪事件被触发后,在5秒超时后将自定义元素添加到DOM中。像这样注入DOM不会再次触发聚合物就绪事件。
这是初始化Polymer元素属性的正确/最佳方法吗?我可以从我的自定义元素手动触发一个事件,说它已加载,但这看起来有点粗糙。有更好的想法吗?
答案 0 :(得分:1)
你不应该在polymer-ready
事件之前使用任何自定义元素(除非你故意这样做),我认为你能做的最好的事情就是用ready
个回调替换掉polymer-ready
。
但是,如果您仍想使用ready
回调,则可以在元素的myDataChange
回调中调用ready
:
Polymer({
created: function(){
this.myData = [];
},
observe:{
myData: 'myDataChange'
},
ready: function() {
this.myDataChange([], this.myData);
},
myDataChange: function(val, newVal){ ... }
....