在元素上设置属性给出错误“无法设置属性'...'未定义'与聚合物
问题描述:
我试图设置一个使用聚合物的自定义元素,它包含一个可拖动的框和一个图标。希望能够通过指定元件上的icon
属性来定义该图标,这样我可以声明式创建元素而不是元件,这将仅是通过JavaScript访问上定义setIcon
方法。在元素上设置属性给出错误“无法设置属性'...'未定义'与聚合物
我已经试过通过在元素原型中包含properties
属性来设置我的元素以处理该属性,从而为我提供元素代码,如下所示:
var elementProto = {
is : "my-element",
behaviors : [someOtherProto],
properties : {
icon : {
"type" : "String",
"observer" : "_iconObserver",
}
},
_iconObserver : function(){ /* Functionality for adding icon */}
};
elementProto.otherMethods = various functions;
Polymer(elementProto);
在另一个文件中,我再尝试设置使用setAttribute
我的图标属性,另一个JavaScript函数,(通过其关联的HTML文件导入我的新元素后),像这样:
var newElement = document.createElement("my-element");
newElement.setAttribute("icon", "some/icon/path.png");
理想情况下,将以新路径作为参数激发我的观察者函数,并且将我的新元素中的图像的URL设置为任何路径。相反,铬给我这个错误:
Uncaught TypeError: Cannot set property 'icon' of undefined
为什么我得到这个错误,我能做些什么来解决它?调试
注:
我挖成聚合物代码,发现误差从该线来源:
var model = this._clientsReadied ? this : this._config;
两个this._clientsReadied
和this._config
未定义,其在导致该错误._setAttributeToProperty(model, name);
方法,其中name
设置为model
上的属性。不过,我对聚合物知之甚少,不知道为什么这些属性不确定。
答
Why am I getting this error, and what can I do to fix it?
因为在一次调用createElement()
您收到此错误,您的自定义元素尚未注册。可能是因为这2个文件是按错误顺序解析的。
要解决此问题,您可以尝试更改导入文件的顺序,也可以等待HTMLImportsLoaded
或WebComponentsReady
事件。
document.addEventListener("HTMLImportsLoaded", function()
{
var newElement = document.createElement("my-element");
newElement.setAttribute("icon", "some/icon/path.png");
});
您是否尝试过使用像'elementRef.set('property','value')'这样的聚合物'set'方法? – Alan
@Alan我试过'element.setAttribute','element.set','Polymer.dom(element).set'(这是未定义的)和'Polymer.dom(element).setAttribute'。 – ckersch
你知道,我试着用你的代码制作一个[小提琴](https://jsfiddle.net/375chjk2/),它工作得很好......也许你有一些缺少的进口? – Alan