我想创建一个用户只能实例化一次的元素。
到目前为止,我能想到的最好的方法是在匿名函数中定义元素,并在发现元素已经存在时抛出错误。有没有办法让它拒绝被创造?
(function(){
var singleton = false;
Polymer({
is:'my-singleton',
created:function(){
if(singleton) {
throw new Error ('only one my-singleton should be created');
}
singleton = this;
}
});
})();
答案 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;
}
});
})();
这似乎很有效。