2017-05-03 33 views
1

我注意到了一遍又一遍,如果我不喜歡的東西應用:使用`set`犯規在那個時間點

@property int x = 1; 

...code... 

set("x", 2); 
print(x); 

它會顯示它作爲1的原因是,它不必然執行該立即。所以如果我設置了一個屬性,我總是會提出一個觀點,即永遠不要在函數的其餘部分使用它。我一直相信這個集合在當前執行結束時才被調用。

當處理功能時,會發生類似的方法。

它將被分配,但不在函數的範圍內。所以我會嘗試像觀察它並等待狀態改變。

@property Function myFunc = null; 
@reflectable 
_myFunc(_) => true; 

attached(){ 
    set("myFunc", _myFunc); 
    print("is myFunc null: ${myFunc == null}"); 
} 

將返回True。

所以我當時也想嘗試:

@Observe("myFunc") 
functionObservation(_)=>print("Function Called"); 

但這不火。

我期望的結束狀態是,當我通過myFunc到另一個聚合物元件,並嘗試在該類上做的東西與它的連接,因爲這樣的:

@property Function execFunc = null; 
attached(){ 
    if(execFunc != null) 
    execFunc(); 
} 

所以通過當將它裝入另一部件有的問題。

我不是100%肯定,如果這是一個生命週期的問題,或一組錯誤,但它似乎是,當我在做連接,或者定義一個未來:

attached(){ 
    new Future((){ 
    execFunc() 
    }); 
} 

它仍然會顯得不被分配。

回答

1

你應該重寫你的道具作爲getter和setter方法,使用setter方法通知:

int _myProp; 
@reflectable 
int get myProp => _myProp; 
set myProp(v) { 
    _myProp = v; 
    notifyPath('myProp'); 
} 

或者使用像autonotify東西自動獲得通知你的屬性。

這樣可以保證這個代碼總是在控制檯郵票5

myProp=5 
print("${myProp}"); 

不管可能異步聚合物二傳手的行爲。