2016-11-09 73 views
1

嗨我有刷新功能的輸出相關的問題,它被用作綁定到屬性。高分子計算函數刷新值

可以說我有,我想在特定情況下隱藏的HTML的一部分:定義

<div hidden$="[[hideElement()]]"> 

功能高分子對象:

hideElement: function() { 
     if (this.deviceId == undefined) { 
      return false; 
     } 
     else if (typeof this.deviceId === 'string' || this.deviceId instanceof String) { 
      return true; 
     } 
     else { 
      return false; 
     } 
    }, 

我看到的是該元素是不是隱藏此功能的輸出發生變化後。

我可能會錯過一些東西,但我不知道是什麼。

回答

4

該聚合物Data binding文檔中回答。

計算的綁定聲明包括一個計算函數名稱, 後跟括號列表,括號中。

你的問題是計算的函數被調用一次,但它沒有辦法知道函數值會因爲你沒有參數而改變。您需要包含屬性作爲依賴項,以便知道您的函數值何時可能會更改。

例如:

<div hidden$="[[hideElement(deviceId)]]"></div> 

因此,你需要聲明一個屬性

Polymer({ 
    is: 'my-element', 

    properties: { 
     deviceId: String 
    }, 

    hideElement: function(deviceId) { 
     return deviceId ? true : false; 
    } 
}) 

如果你看看其他聚合物的元素,它們通常調用函數_isHidden而不是hideElement以表明它會採取真/假價值。

既然我們已經將deviceId聲明爲一個字符串,這將顯着簡化您的hideElement函數。 "",nullundefined都被評估爲錯誤。

0

問題是hidden屬性再次不會調用hideElement,所以hidden的值永遠不會改變。

您應該將hidden綁定爲布爾值,然後更改該布爾值的值。這樣,每當布爾屬性將改變hidden值也改變

<div hidden$="[[hideElement]]"> 

和JavaScript將會像

properties:{ 
hideElement:{ 
    type:Boolean 
    value:false 
}, 
}, 
hideValue:function(){ 
if (this.deviceId == undefined) { 
     this.hideElement= false; 
     return; 
    } 
    else if (typeof this.deviceId === 'string' || this.deviceId instanceof String) { 
     this.hideElement=true; 
     return; 
    } 
    else { 
     this.hideElement=false; 
     return; 
    } 
}