2017-05-03 32 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}"); 

不管可能异步聚合物二传手的行为。