使用`set`不适用于那个时间点

时间:2017-05-03 19:48:19

标签: dart polymer-1.0 dart-polymer

我一遍又一遍地注意到,如果我做了类似的事情:

@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()
  });
}

似乎仍未分配。

1 个答案:

答案 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}");

无论可能的异步聚合物设定器行为如何。