2014-08-31 43 views
2

我一直在玩聚合物.dart教程中的秒錶示例。我已經改變了@Observable String counter = '00:00';到:是否可以在polymer.dart中發佈匹配的getter和setter屬性?

String _counter = '00:00'; 
@published void set counter (String s){ _counter = s; } 
@published String get counter => _counter; 

我將它設置爲@published這樣我就可以設置在HTML標籤上的計數器屬性和這個偉大的工作,當我最初只是把它改爲@Published String counter = '00:00';而擁有它拆分成單獨的getter和setter屬性不再起作用,是否可以做這樣的事情?我希望通過編程或通過用戶/ html更改來更改綁定值時執行一些自定義邏輯。

回答

2

@observable只對吸氣劑是必要的。

我猜你想要做的是

// additional functionality in the setter 
String _counter = '00:00'; 
@PublishedProperty(reflect: true) 
String get counter => _counter; 
void set counter (String s){ 
    _counter = s; 
    // do something ... 
} 

void attached() { 
    new async.Timer.periodic(new Duration(seconds:1), (_) { 
    var oldVal = _counter; 
    var time = new DateTime.now(); 
    _counter = '${time.minute}:${time.second}'; 
    // explicitely notify Polymer about the changed value 
    notifyPropertyChange(#counter, oldVal, _counter); 
    }); 
} 

或可替代

// additional functionality in xxxChanged 
@PublishedProperty(reflect: true) 
String counter = '00:00'; 

void counterChanged(oldVal, newVal){ 
    // do something ... 
} 

另一個是

// use readValue/writeValue to fix some timing issues 
@PublishedProperty(reflect: true) 
String get counter => readValue(#counter); 
void set counter (String s){ 
    writeValue(#counter, s); 
    // do something ... 
} 

//in the constructor 
writeValue(#counter, '00:00'); 

@PublishedProperty(reflect: true)確保HTML屬性獲取與更新字段值。

如果你覺得這混亂的,你並不孤單...... 3個解決方案,我只能得到,如果我用中間的一個它的工作的

+0

,只有當我設置現場'@ published'我不能讓任何人用'@PublishedProperty()' – 0xor1 2014-08-31 14:08:14

+0

我在第一個例子中忘記了一些東西('notifyPropertyChange'),否則這對我有用。你使用什麼聚合物版本? – 2014-08-31 15:05:25

+0

我使用聚合物0.11.0 + 5 – 0xor1 2014-09-02 19:49:37

相關問題