Actualmente tengo el siguiente desajuste de impedancia: un controlador de eventos para un control colocado dinámicamente dentro de un componente cshtml reutilizable necesita llamar a una función cargada por require() .
¿Hay alguna manera de recuperar un módulo de require y hacer que se invoque mi lambda cuando esté listo?
<input type='checkbox' @(condition ? "onclick='require(\"js/view/handlers\", function (handlers) => { handlers.handleCheckboxMatchingCondition(this); }); return true;'" : "")> Normalmente, la rutina es usar id= y hacer coincidir el inicializador del módulo con addEventListener , pero no funcionará aquí porque el componente es reutilizable.
La idea en realidad no es hacer una nueva carga de javascript de un módulo (el módulo se carga en la parte superior de la página), sino manejar la posible condición de que el usuario haga clic en el cuadro antes de que el módulo haya terminado de cargarse.
Entonces resultó que este código estaba muy cerca de ser realmente un código de trabajo. require() solo necesitaría un ajuste menor para que funcione.
<input type='checkbox' onclick="@(condition ? @"return (function(){ let sync = true; require(['js/view/handlers'], function (handlers) => { if (sync) // It's too hard to make this function work both sync and async // so we kick it to top level and it's always async setTimeout(0, handlers.handleCheckboxMatchingCondition, this); else handlers.handleCheckboxMatchingCondition(this); }); sync = false; return true;});" : "")>Se siente como algo que podría ir a una biblioteca contenedora trivial (que se carga directamente por la razón obvia).