2017-07-31 51 views
1

最近,我遇到了以下問題:聚合物的性能不監聽方法稱爲

在我的基於聚合物的項目,我有一個自定義元素,讓我們稱之爲<test-element>。這個元素作爲px-rangepicker作爲依賴項,它基本上只是一個日期選擇器。如果您從該選取器中選擇一個日期,則會觸發事件px-datetime-range-submitted。在我的test-element我有專門的監聽器:

Polymer({ 
    is: 'test-element', 
    properties: { 
     test: { 
      type: String, 
      value: "foobar" 
     } 
    }, 
    listeners: { 
     'px-datetime-range-submitted': '_onDateRangeChanged' 
    }, 
    _onDateRangeChanged: function(changeEvent) { 
     console.log(this.test); 
    } 
}); 

現在,當我進入該網站,test-element加載的第一次,_onDateRangeChanged方法被調用。到目前爲止,一切都很好。但是: 控制檯僅適用於undefined。該方法內不能訪問任何屬性。奇怪的是:

console.log(Polymer.dom(this)); 

會給我一個完整的DomApi輸出預期,我的財產作爲一個節點:

▼ DomApi {node: test-element} 
    ▼ node:test-element.iron-selected 
    ► $: Object 
     test: "foobar" 

我不禁會發生些什麼 - 任何幫助或信息非常感謝。

謝謝。

更新:

參見the code at GitHuba working example here(該px-datetime-range-submitted事件被稱爲5倍和控制檯輸出是undefined)。

+0

從代碼的外觀來看,錯誤必須在其他地方。請提供更多代碼和/或小提琴來重現此行爲。 –

+0

對於實際 - 我的'test-element'裏面沒有任何其他代碼。我刪除了除此之外的所有內容,但仍無法訪問屬性。如果我環繞 – sebastian

+0

這真的很奇怪 –

回答

1

嗨你舉的例子問題不是你的代碼或datepicker的代碼。它只是聚合物的工作原理。
這是爲什麼發生?
px-rangepicker在其中實現了一個名爲​​的行爲,其中有一個觀察者_notifyRangeChanged(range.*),該屬性由範圍屬性的更改觸發,同時此觀察者觸發px-datetime-range-submitted事件。這個屬性有一個默認值,這意味着它的值在組件創建時被填充,並觸發觀察者。這似乎是在你自己的組件的屬性被初始化之前完成的,然後它仍然是未定義的。但在此之後,當您打開選取器並選擇另一個日期時再次觸發,然後測試屬性填充爲foobar
爲防止發生任何不良情況,請檢查是否設置了測試的值。

_onDateRangeChanged: function(changeEvent) { 
    if(this.test !== undefined) { 
     console.log(this.test); 
    } 
} 
+0

這是正確的,但我不理解在這種情況下「靜態」屬性是如何定義的,甚至當我同時輸出「Polymer.dom(this)」時 - 我的屬性不是未定義的。 – sebastian

+0

Sry不能解釋這一點。你有沒有嘗試用'this.get('test')讀取變量'get應該是聚合物的一個普通函數。 –

+0

我做了同樣的結果。它沒有定義。 – sebastian