Esecuzione dinamica di modelli letterali utilizzando una mappa

1

Ho un sistema che genera eventi interni per oggetti. Sto estendendo il loro debugger per visualizzare una versione leggibile dagli utenti degli eventi inviati al debugger.

Ad esempio, il sistema genererà "OnClick" per il controllo "Blue Button", su una vista "a-guid-value-for-the-view". Se la versione leggibile di "a-guid-value-for-the-view" è "Customer Edit View", desidero generare

Nella vista Modifica cliente, è stato fatto clic sul pulsante blu.

Per configurarlo, mapperò ogni evento a un modello letterale che valuto dinamicamente. Il mio codice funziona ma l'impostazione della mappa in PopulateEvents sembra troppo pesante. C'è un modo per renderlo più leggibile?

//Setup the list of events
function populateEvents() {
    events = new Map([
        ["OnClick", function _renderEvent(viewId, controlName, properEvent) {
            return 'On the ${_viewName(viewId)}, ${controlName} was ${properEvent}.'}],
    ])}

//Function to translate system event
var eventName = function (eventParams) {
    return events.get(systemEventName)(viewId, controlName, properEvent);
}

var viewName = function (viewId) {
    if (!views.has(viewId)) {
        views.set(viewId, fnToConvertViewIdToName(viewId))
    }
    return views(viewId);
}

}

    
posta strattonn 18.10.2018 - 00:45
fonte

1 risposta

0

No. Usa invece l'ereditarietà - non è necessario creare una mappa in quanto non vi è alcun vantaggio nel ridefinire un gestore per ciascun evento e dover subire il tempo di elaborazione aggiunto. Sarà molto più semplice aggiungere un gestore di eventi all'oggetto di base. Ti suggerisco di usare l'ereditarietà e l'amp; composizione invece di un'implementazione statica su ogni istanza dei tuoi oggetti DOM - Potresti aver bisogno di una rapida rilettura sulla gestione degli eventi in JS (o in qualsiasi lingua preferita).

Comprendi che un evento è un evento è un evento e hai solo bisogno di un gestore di log generico che faccia parte della catena di gestione degli eventi - basta installare la funzione di callback nella catena di eventi in modo che venga gestita per tutti gli eventi e quindi creare una case-statement che attiva eventType per eseguire la registrazione corretta:

function anyEvent (event) {

switch (event.eventType) {

    case "onclick":

           var view = dosomethingToGetTheView(event);
           var parent = getParentObject(event);
           var type = ...

           logEvent(view, event, parent, type...);
           break; 

}

}

    
risposta data 18.10.2018 - 01:19
fonte

Leggi altre domande sui tag