Доброго дня!
Дорабатываю режим истории, есть слайдер, который можно запустить и данные по элементам начнут обновляться по заданному интервалу.
$scope.timeline.range.start(end) - переменные модели, показывают текущий отображаемый промежуток
_intermediateRange.start(end) - использую для отправки запросов за данными, передаю при инициализации режима истории объект в механизм отправки запроса
Сам механизм отправки запросов, был написан еще до того как на проекте появился angular
Зачем же мне понадобился дополнительный объект(_intermediateRange)?
Инкремент переменной модели происходит сразу после получения ответа, в следствии чего данные в модели изменяются раньше чем за ними уходит запрос, менять механизм отправки данных не представляется возможным
Так вот, на каждой итерации, попадаем в _playback, где меняем переменную модели, вот тут и проблема data-binding не срабатывает, запросы уходят, $scope.timeline.range.start(end) меняются, во вьюхе же остаются старые данные, дописал $scope.digest(); 3-я строчка метода _playback и получаю в консоль:
Error: [$rootScope:inprog] $apply already in progress
Я так понял, что digest уже выполняется
function _playback(sender, eventArgs) {
$scope.timeline.range.start = _intermediateRange.start;
$scope.timeline.range.end = _intermediateRange.end;
$scope.$digest();
_playStep();
}
function _playStep() {
var range = parseInt($scope.timeline.range.end - $scope.timeline.range.start);
if(_intermediateRange.end == $scope.timeline.bounds.end) {
return false;
}else if(_intermediateRange.end + $scope.timeline.shift > $scope.timeline.bounds.end) {
_intermediateRange.end = $scope.timeline.bounds.end;
_intermediateRange.start = $scope.timeline.bounds.end - range;
}else {
_intermediateRange.start += $scope.timeline.shift;
_intermediateRange.end += $scope.timeline.shift;
}
}
А началась вся эта интересная история с data-binding после того как добавил вызов _playback в следующий метод, можно и без него и собственно ошибок не будет)
Но тогда запрос за первой порцией данных будет тот что мы уже видим
function _startPlayback() {
var timeline = $scope.timeline;
var rate = timeline.updateRate / timeline.multiply;
rate = rate < MIN_RATE ? MIN_RATE : rate;
_stopPlayback();
if($scope.timeline.range.end > $scope.timeline.bounds.end) {
_setToStart();
}
_playback();
params.makeAction($scope.controller, 'timeline_start_playback', {_playback: _playback, rate: rate});
}
Подскажите плиз может кто знает как дебажить angular, понять кто вызвал didgest и почему данные в модели остаются неизменными, при изменении переменной $scope.