2016-11-09 5 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

ようになりますまた、hiddenの値を変更するときはいつでもこの方法です。

計算されたバインディング宣言には、コンピューティング関数名 とそれに続く括弧内の依存関係のリストが含まれています。

あなたの問題は、計算された関数が一度呼び出されることですが、将来引数値を指定してから関数の値が変更されることはありません。依存関係としてプロパティを含める必要があるため、関数値がいつ変更されるかを知ることができます。例えば

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

このように、あなたは他のポリマー要素を見ればhideElementとは対照的に、彼らは一般的にそれがすることを示すために機能_isHiddenを呼び出す

Polymer({ 
    is: 'my-element', 

    properties: { 
     deviceId: String 
    }, 

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

プロパティを宣言する必要がありますTrue/Falseの値をとる。

deviceIdを文字列として宣言しているので、hideElement関数が大幅に簡略化されます。 "",nullおよびundefinedはすべて偽と評価されます。

0

問題はhiddenプロパティは再度hideElementを呼び出さないため、hiddenという値は決して変更されません。

hiddenをブール値にバインドし、そのブール値を変更する必要があります。ブール型プロパティが

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

を変更してJavaScriptを有効にしては、Polymer Data binding文書で回答され

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; 
    } 
} 
関連する問題