2014-11-19 1 views
1

код ссылки DartAnonymous функция обратного вызова JSObject не обновляется Dart контроллер до окончания действия пользователя

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 миллиметров cond delay Я вижу в своей консоли «WTF» правильно печатать. Тем не менее, div все еще виден. Как только действие пользователя происходит, в моем случае щелчок мыши, div волшебным образом исчезает. Кажется, что значение контроллера изменено, но браузер не получает изменения, чтобы скрыть div, так как я напечатал значение контроллера в анонимном обратном вызове.

Работает вокруг, но включает в себя настройку таймера Дарта на те же самые времена затухания, которые вы используете в javascript после вызова JsObject и установки значений вашего контроллера в этих обратных вызовах таймера - брутто, но он работает.

ответ

1

Мне кажется, вам нужно позвонить scope.apply(). Я думаю, что Angular просто не может распознать изменение значения в hideDiv, когда doit() вызывается из другой зоны (например, JS).

Обычно вам не нужно звонить scope.apply() в Angular.dart, но я думаю, что это одно из исключений.

Является ли функция animate единственной причиной, по которой вы используете jQuery? Это может быть проще сделать с помощью функций анимации Angular.darts.

+0

Это сработало. Очень глупо меня забыть о 'scope.apply()', но я постоянно это делаю. Надеюсь, это поможет кому-то. Как в стороне, пока я использую его только для анимации, это всего лишь макет сайта и может быть расширен в будущем. Я провел некоторое исследование по этому вопросу и нашел [пакет пабов для анимаций] (https://pub.dartlang.org/packages/animation), но раздел недостающих функций отвлек меня от него. – Squiggler

+1

Вы знаете о поддержке анимации Angular.darts? https://www.youtube.com/watch?v=EqilB8nJ6gE –

+0

Ну, черт побери. Похоже, у меня есть рефакторинг! Благодаря!! – Squiggler