在元素上设置属性给出错误“无法设置属性'...'未定义'与聚合物

问题描述:

我试图设置一个使用聚合物的自定义元素,它包含一个可拖动的框和一个图标。希望能够通过指定元件上的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._clientsReadiedthis._config未定义,其在导致该错误._setAttributeToProperty(model, name);方法,其中name设置为model上的属性。不过,我对聚合物知之甚少,不知道为什么这些属性不确定。

+0

您是否尝试过使用像'elementRef.set('property','value')'这样的聚合物'set'方法? – Alan

+0

@Alan我试过'element.setAttribute','element.set','Polymer.dom(element).set'(这是未定义的)和'Polymer.dom(element).setAttribute'。 – ckersch

+1

你知道,我试着用你的代码制作一个[小提琴](https://jsfiddle.net/375chjk2/),它工作得很好......也许你有一些缺少的进口? – Alan

Why am I getting this error, and what can I do to fix it?

因为在一次调用createElement()您收到此错误,您的自定义元素尚未注册。可能是因为这2个文件是按错误顺序解析的。

要解决此问题,您可以尝试更改导入文件的顺序,也可以等待HTMLImportsLoadedWebComponentsReady事件。

document.addEventListener("HTMLImportsLoaded", function() 
{ 
    var newElement = document.createElement("my-element"); 
    newElement.setAttribute("icon", "some/icon/path.png"); 
});