如何在Polymer中创建单例元素

akc*_*c42 5 polymer

我想创建一个用户只能实例化一次的元素.

到目前为止,我能想到的最好的方法是在匿名函数中定义元素,并在发现元素已经存在时抛出错误.有没有办法让它拒绝被创造?

(function(){
  var singleton = false;
  Polymer({
   is:'my-singleton',
   created:function(){
    if(singleton) {
     throw new Error ('only one my-singleton should be created');
    }
    singleton = this;
   }
  });
})();
Run Code Online (Sandbox Code Playgroud)

akc*_*c42 3

我似乎有一个未记录的remove()元素函数。我只是将之前的代码移至该attached函数中,并保留一个变量来记录我是否已处于活动状态。

(function(){
  var singleton = false;
  Polymer({
   is:'my-singleton',
   attached:function(){
    if(singleton) {
     this.isActive = false;
     this.remove();
    } else {
     singleton = true;
     this.isActive = true;
     // remainder of element initialization
    }
  },
  detached:function() {
   if(this.isActive) singleton = false;
  }
 });
})();
Run Code Online (Sandbox Code Playgroud)

这看起来效果很好。