javascript - Återanvändbara objekt-literal
Jag har en komponent med en tabell som har handlingsknappar. När man klickar på knappen sänder komponenten en handling, till exempel: (redigera, ta bort, routa)
getEvent(action: ActionButtons, object: any) {
// type: (edit,delete,route), route: info where to redirect
const {type, route} = action;
this.action.emit({ type, route, body: object });
}
I föräldrakomponenten fångar jag detta objekt med följande funktion och utför viss logik beroende på åtgärden:
getAction({type, route, body: {...faculty }}) {
const action = {
edit: () => {
this.openFacultyModal(faculty);
},
delete: () => {
this.openConfirmDialog(faculty);
},
route: () => {
this.redirecTo(faculty.faculty_id);
}
};
action[type]();
}
Problemet är att om jag vill använda tabellen i en annan komponent måste jag klippa ut och klistra in getAction() och bara ändra funktionen inne i objektet.
Det visar sig att det kommer att bli kodduplicering.
Är det möjligt att på något sätt lösa problemet med kodduplication genom att använda closures eller skapa en separat klass?
Svar #1
Du kan göra ditt handlingskartobjekt återanvändbart:
const actions = {
edit(target, faculty) {
target.openFacultyModal(faculty);
},
delete(target, faculty) {
target.openConfirmDialog(faculty);
},
route(target, faculty) {
target.redirecTo(faculty.faculty_id);
}
};
Använd det sedan där det behövs, till exempel i getAction:
getAction({type, route, body: {...faculty }}) {
actions[type](this, faculty);
}
