2016-11-09 74 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; 
    } 
}