Dart 此时使用“set”不适用

Dart 此时使用“set”不适用,dart,polymer-1.0,dart-polymer,Dart,Polymer 1.0,Dart Polymer,我一次又一次地注意到,如果我做了以下事情: @property int x = 1; ...code... set("x", 2); print(x); 它将显示为1。原因是它不一定立即执行。因此,如果我设置了一个属性,我总是强调在函数的其余部分永远不要使用它。我一直认为set只是在当前执行结束时调用的 在处理函数时,也会出现类似的方法 它将被分配,但不在功能范围内。所以我会尝试观察它,等待状态的改变 @property Function myFunc = null; @reflectab

我一次又一次地注意到,如果我做了以下事情:

@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}");
}
将返回真值

因此,我也会尝试:

@Observe("myFunc")
functionObservation(_)=>print("Function Called");
但这不会开火

我期望的最终状态是,当我将
myFunc
传递到另一个聚合元素中,并尝试在附加的类中使用它时,例如:

@property Function execFunc = null;
attached(){
  if(execFunc != null)
    execFunc();
}
因此,当将其传递到另一个组件时,会出现问题

我不能100%确定这是一个生命周期问题,还是一个设置错误,但当我在附件中执行此操作或定义未来时:

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

它似乎仍然没有被分配。

您应该将道具重写为setter和getter,并使用setter进行通知:

int _myProp;
@reflectable
int get myProp => _myProp;
set myProp(v) {
   _myProp = v;
   notifyPath('myProp');
}
或者使用类似的方法自动通知您的属性

这样可以保证此代码始终在控制台中标记
5

myProp=5
print("${myProp}");
不管可能的异步聚合物设定器行为