Ganchos de extensión
En distintos momentos durante la ejecución de Comfy, la aplicación llama a#invokeExtensionsAsync o a #invokeExtensions con el nombre de un gancho.
Estas invocan, en todas las extensiones registradas, el método con el nombre correspondiente (si existe), como setup
en el ejemplo anterior.
Comfy ofrece una variedad de ganchos que el código de extensiones personalizadas puede usar para modificar el comportamiento del cliente.
A continuación se describen algunos de los ganchos más importantes.
Como Comfy está en desarrollo activo, de vez en cuando se añaden ganchos nuevos, así que
busca #invokeExtensions en app.js para encontrar todos los ganchos disponibles.
Consulta también la secuencia en la que se invocan los ganchos.
Ganchos de uso común
Empieza porbeforeRegisterNodeDef, que usan la mayoría de las extensiones y a menudo es el único necesario.
beforeRegisterNodeDef()
Se llama una vez por cada tipo de nodo (la lista de nodos disponibles en el menúAddNode) y se usa para
modificar el comportamiento del nodo.
nodeType sirve básicamente como plantilla
para todos los nodos que se creen de este tipo, así que las modificaciones que hagas en nodeType.prototype se aplicarán
a todos los nodos de este tipo. nodeData es una encapsulación de aspectos del nodo definidos en el código Python,
como su categoría, entradas y salidas. app es una referencia al objeto principal de la app de Comfy (¡que ya
has importado de todos modos!).
La práctica habitual es comprobar nodeType.ComfyClass, que contiene el nombre de la clase Python correspondiente a este nodo,
para ver si necesitas modificar el nodo. A menudo esto significa modificar los nodos personalizados que has añadido,
aunque en ocasiones puede que necesites modificar el comportamiento de otros nodos (¡o que otros nodos personalizados
modifiquen los tuyos!), en cuyo caso conviene tener cuidado para garantizar la interoperabilidad.
Una práctica muy común en beforeRegisterNodeDef es «secuestrar» un método existente:
Obsoleto: El patrón de secuestro de prototipos que se muestra a continuación está obsoleto y puede cambiar en cualquier momento en un futuro próximo. Para los menús contextuales, usa la Context Menu API oficial. Para otros casos de uso, prefiere los ganchos de extensión oficiales cuando estén disponibles.
?.apply garantiza que, si no había ninguno, la operación siga siendo segura) y después
realiza operaciones adicionales. Según la lógica de tu código, puede que necesites colocar el apply en otro lugar de tu código de reemplazo,
o incluso hacer que la llamada sea condicional.
Cuando secuestres un método de esta forma, conviene revisar el código central de Comfy (los puntos de interrupción son tus aliados) para comprobar
la firma del método y adaptarte a ella.
nodeCreated()
ComfyNode() en nodeType, que actúa como constructor).
En este gancho puedes hacer modificaciones en instancias individuales de tu nodo.
init()
LiteGraph). Esto se trata con más detalle en Objetos de Comfy.
setup()
Secuencias de llamadas
Estas secuencias se obtuvieron insertando código de registro en el archivoapp.js de Comfy. Puede que un código similar te resulte útil
para entender el flujo de ejecución.