如何强制Polymer.Element扩展类执行其生命周期而不将其附加到dom?

时间:2017-06-06 17:34:48

标签: polymer lifecycle polymer-2.x

考虑这个元素(对于问题而言是最小的)

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的隐藏元素以强制生命周期,但我认为这不是那么直观。

1 个答案:

答案 0 :(得分:0)

我不知道确切的地方,但问题是房产评估员没有到位。

我想你可以从google i / o

的这个话题https://www.youtube.com/watch?v=assSM3rlvZ8中得到线索

在构造函数回调中调用this._enableProperties()