如何在Polymer

时间:2015-11-10 13:31:03

标签: 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;
   }
  });
})();

2 个答案:

答案 0 :(得分:3)

是否要限制页面上<my-singleton>的数量,或者只是拥有单身状态&#39;?

要在多个元素实例之间共享单例状态/服务,您可以执行以下操作:

(function() {
    'use strict';

    // singleton shared connection between all instances of rg-signalr
    var singletonState = {
        counter: 0
    };

    Polymer({
        is: 'my-element-using-singleton-state',

        attached() {
            singletonState.counter++;
        }
    });
})();

答案 1 :(得分: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;
  }
 });
})();

这似乎很有效。