1

ダーツコードを考えると

class LandingController {
  bool hideDiv = false;

  void doit() {
      new JsObject(context['loginControls']).callMethod('fadeLogin', [() {
         print(hideDiv);
         hideDiv = true;
         print(hideDiv);
         print("WTF");
      }]);
  }
}

JSを呼び出します:

var loginControls = function() {
  this.fadeLogin = function(func) {
    $('#landingHeader').animate({ opacity: 0 }, 500, func);
  }
};

ビューに影響を与えるはずです:

<button ng-click="doit();">Click</button>
<div id="landingHeader">Hide me after button click</div>
<div ng-if="ctrl.hideDiv == false"><img src="assets/img/ajax-loader-small.gif">Waiting for div to disappear...</div>

ボタンのクリックと 500 ミリ秒の遅延の後、コンソールに "WTF" が正しく表示されます。divただし、 は引き続き表示されます。ユーザー アクションが発生すると (私の場合はマウス クリック)、div魔法のように消えます。コントローラーの値が変更されたように見えますが、匿名のコールバックでコントローラーの値を出力したため、ブラウザーは div を非表示にする変更を受け取りません。

回避策がありますが、呼び出し後に JavaScript で使用するのと同じフェード時間に Dart タイマーを設定しJsObject、それらのタイマー コールバックでコントローラーの値を設定する必要があります。

4

1 に答える 1