Mam stronę internetową, która służy jako edytor dla pojedynczego elementu, który znajduje się jako głęboki wykres we właściwości $ scope.fieldcontainer. Po otrzymaniu odpowiedzi z mojego interfejsu API REST (za pośrednictwem zasobu $) dodaję zegarek do 'fieldcontainer'. Używam tego zegarka do wykrywania, czy strona / jednostka jest „brudna”. W tej chwili odbijam przycisk Zapisz, ale naprawdę chcę, aby przycisk Zapisz był niewidoczny, dopóki użytkownik nie zabrudzi modelu.
To, co otrzymuję, to pojedynczy spust zegarka, który, jak sądzę, dzieje się, ponieważ przypisanie .fieldcontainer = ... ma miejsce natychmiast po utworzeniu mojego zegarka. Myślałem o użyciu po prostu właściwości „dirtyCount” do zaabsorbowania początkowego fałszywego alarmu, ale wydaje mi się to bardzo hackerskie ... i pomyślałem, że musi istnieć sposób „Angular idiomatic”, aby sobie z tym poradzić - nie jestem jedyny za pomocą zegarka, aby wykryć brudny model.
Oto kod, w którym ustawiam zegarek:
$scope.fieldcontainer = Message.get({id: $scope.entityId },
function(message,headers) {
$scope.$watch('fieldcontainer',
function() {
console.log("model is dirty.");
if ($scope.visibility.saveButton) {
$('#saveMessageButtonRow').effect("bounce", { times:5, direction: 'right' }, 300);
}
}, true);
});
Po prostu myślę, że musi istnieć czystszy sposób, aby to zrobić, niż pilnowanie mojego kodu „UI dirtying” za pomocą „if (dirtyCount> 0)” ...
undefined
. Ma wartość domyślną, która jest niezbędna, w przypadku mojej aktualizacji modelu nie pojawiły się wszystkie informacje. Dlatego niektóre wartości nie zmieniają się, ale muszą zostać wyzwolone.