2016-07-15 39 views
0

我試圖設置一個使用聚合物的自定義元素,它包含一個可拖動的框和一個圖標。希望能夠通過指定元件上的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

回答

1

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"); 
}); 
相關問題