我一遍又一遍地注意到,如果我做了类似的事情:
@property int x = 1;
...code...
set("x", 2);
print(x);
它会将其显示为1.原因是它不一定立即执行此操作。因此,如果我设置了一个属性,我总是把它从未通过函数的其余部分使用它。我一直认为set是在当前执行结束时调用的。
在处理函数时会发生类似的方法。
它将被分配但不在函数范围内。所以我会尝试观察它并等待状态的改变。
@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
传递到另一个聚合物元素并尝试在该类中使用它时,#39;附上,如此:
@property Function execFunc = null;
attached(){
if(execFunc != null)
execFunc();
}
所以当把它传递到另一个组件时会出现问题。
我不是百分之百确定这是生命周期问题,还是设定错误,但似乎当我在附件中执行时,或者定义未来:
attached(){
new Future((){
execFunc()
});
}
似乎仍未分配。
答案 0 :(得分:1)
你应该将你的道具重写为setter和getter,并使用setter进行通知:
int _myProp;
@reflectable
int get myProp => _myProp;
set myProp(v) {
_myProp = v;
notifyPath('myProp');
}
或使用autonotify之类的内容自动获取通知您的属性。
这样可以保证此代码始终在控制台中标记5
:
myProp=5
print("${myProp}");
无论可能的异步聚合物设定器行为如何。