考虑这个元素(对于问题而言是最小的):
class MyCountDown extends Polymer.Element
{
static get is () { return 'my-count-down'; }
static get properties ()
{
return {
time: { /* time in seconds */
type: Number,
observer: '_startCountDown'
},
remains: Number
}
}
_startCountDown ()
{
this.remains = this.time;
this.tickInterval = window.setInterval(() => {
this.remains--;
if (this.remains == 0) {
console.log('countdown!');
this._stopCountDown();
}
}, 1000);
}
_stopCountDown () {
if (this.tickInterval) {
window.clearInterval(this.tickInterval);
}
}
}
customElements.define(MyCountDown.is, MyCountDown);
如果我获得一个实例并设置属性时间,
let MyCountDown = customElements.get('my-count-down');
let cd = new MyCountDown();
cd.time = 5;
属性 time 更改但 observer 和 _startCountDown()函数未被调用。我相信 Polymer 正在等待将实例附加到DOM,因为实际上当我将该元素appendChild()时,该元素开始倒计时,并且在5秒后控制台记录'countdown!'
如预期的那样。
我的目标是执行此生命周期而不将任何内容附加到文档,因为MyCountDown的实例并不总是附加到视图,而是/并且它们需要是我的Web应用程序的不同组件之间的实时代码。
一个解决方案是将新的MyCountDown实例附加到dom的隐藏元素以强制生命周期,但我认为这不是那么直观。
答案 0 :(得分:0)
我不知道确切的地方,但问题是房产评估员没有到位。
我想你可以从google i / o
的这个话题https://www.youtube.com/watch?v=assSM3rlvZ8中得到线索在构造函数回调中调用this._enableProperties()
?