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>
**這真的是個壞主意**,因爲** [計算函數的參數是函數的依賴關係](https://www.polymer-project.org/2.0/docs/devguide/ob服務器#限定-A計算的屬性)**。這意味着,當作爲函數的參數放置的其中一個屬性發生更改時,這將直接觸發計算函數以重新計算計算出的屬性。 在你的情況下,'result'屬性是靜態的,並且如果'value'或'value2'改變,將永遠不會重新計算。 – Yairopro
這是真的,但我認爲你不能讓它表現得那樣。你可以做的是創建一個觀察者,觀察這兩個值並相應地更新結果。我更新了答案。 – Elar
這個答案好多了!但仍然不是我正在尋找的東西。因爲在我無法編輯父類的代碼並重新實現計算其屬性的方式(使用lcomplex-listener而不是計算屬性)的情況下,這不是一個解決方案。 – Yairopro