Ich habe diese beiden Funktionen, und ich denke, dass es eine elegante, funktionale Möglichkeit geben muss, sie zu verallgemeinern.Generalisieren von zwei Funktionen, die auf zwei Eigenschaften invers wirken
$scope.togglePick = function(){
let targetPhoto = $scope.photoImport.data[indexService.current];
targetPhoto.pick = !targetPhoto.pick;
if(targetPhoto.reject && targetPhoto.pick) {
targetPhoto.reject = false;
}
}
$scope.toggleReject = function() {
let targetPhoto = $scope.photoImport.data[indexService.current];
targetPhoto.reject = !targetPhoto.reject;
if (targetPhoto.reject && targetPhoto.pick) {
targetPhoto.pick = false;
}
}
Ich glaube, ich in string params togglePick = toggle('pick', 'reject')
passieren könnte und []
Notation in der toggle
Funktion verwenden, aber das fühlt sich an wie Magie Saiten ... obwohl sie Eigenschaftsnamen sind, bin ich unsicher. Ich könnte auch haben:
function toggle(magicFlag){
let primary = magicFlag ? 'pick' : 'reject';
let secondary = magicFlag ? 'reject' : 'pick';
...
targetPhoto[primary] = !targetPhoto[primary];
...
}
Wieder, ick, magische Flagge. Gibt es einen eleganteren Weg, dies als Longhand in jeder Funktion zu tun?
Ich denke, die Menge an Code in diesen Funktionen und die geringen Unterschiede macht sie so fein wie sie sind. Ohne die seltsame Eigenschaft der Eigenschaftsstrange zu bearbeiten, sehe ich nicht, wie Sie diese generische Zeile wirklich machen, während sie lesbar bleibt. Manchmal ist es okay, nicht so allgemein wie möglich zu sein. Diese Linie im Sand muss irgendwo gezeichnet werden. – Yatrix
Sehr geschätzt. Ich bleibe bei lesbar. Wenn dies nicht zu einer "nicht zu rechtfertigenden" Frage auf SO (basierend auf Meinungen) führt, würde ich das gerne als Antwort akzeptieren. – Dan
Kühl. Ich habe es zu einer Antwort bewegt. – Yatrix