2017-12-02 362 views
1

如何覆蓋計算的屬性?聚合物 - 如何覆蓋計算的屬性?

這裏有一個片段,其中的父類A計算result屬性等於value財產,而它的子類B重新計算result屬性等於value + value2

但覆蓋不工作...

class A extends Polymer.Element {  
 
    static get properties(){ 
 
     return { 
 
     value : Number, 
 
     
 
     result : { 
 
      type : Number, 
 
      computed : "computeProperty(value)" 
 
     } 
 
     } 
 
    } 
 
    
 
    computeProperty(value){ 
 
     return value; 
 
    } 
 
    } 
 
    
 
    class B extends A { 
 
    static get is() { return "b-element"; } 
 
    
 
    static get template(){ 
 
     return ` 
 
     <div>Value : [[value]]</div> 
 
     <div>Value2 : [[value2]]</div> 
 
     <div>Result : [[result]]</div> 
 
     ` 
 
    } 
 
    
 
    static get properties(){ 
 
     return { 
 
     value2 : Number, 
 
     
 
     result : { 
 
      type : Number, 
 
      computed : "recomputeProperty(value, value2)" 
 
     } 
 
     } 
 
    } 
 
    
 
    recomputeProperty(value, value2){ 
 
     return value + value2; 
 
    } 
 
    } 
 
    
 
    
 
    // Register the new element with the browser 
 
    customElements.define(B.is, B);
<script src="https://polygit.org/components/webcomponentsjs/webcomponents-loader.js"></script> 
 
<link rel="import" href="https://polygit.org/components/polymer/polymer-element.html"> 
 

 
    <b-element value="1" value2="2"> 
 
    </b-element>

回答

0

我不認爲這是可能的,但你可以做的是利用觀察員:

static get properties() { 
     return { 
     // ... 

     result : { 
      type : Number, 
      // making the result read-only because it's computed 
      readOnly : true, 
     } 
     } 
    } 


    static get observers() { 
     return ['onValueChanged(value, value2)'] 
    } 

    onValueChanged(value, value2) { 
     this.setProperties({ 
     result : value + value2 
     }, true); 
    } 
+0

**這真的是個壞主意**,因爲** [計算函數的參數是函數的依賴關係](https://www.polymer-project.org/2.0/docs/devguide/ob服務器#限定-A計算的屬性)**。這意味着,當作爲函數的參數放置的其中一個屬性發生更改時,這將直接觸發計算函數以重新計算計算出的屬性。 在你的情況下,'result'屬性是靜態的,並且如果'value'或'value2'改變,將永遠不會重新計算。 – Yairopro

+0

這是真的,但我認爲你不能讓它表現得那樣。你可以做的是創建一個觀察者,觀察這兩個值並相應地更新結果。我更新了答案。 – Elar

+0

這個答案好多了!但仍然不是我正在尋找的東西。因爲在我無法編輯父類的代碼並重新實現計算其屬性的方式(使用lcomplex-listener而不是計算屬性)的情況下,這不是一個解決方案。 – Yairopro