Registrar los archivos#

Declarar archivos UI en ui.xml, colocar definiciones compartidas antes de los módulos que las utilizan. Declarar las cesiones de terceros y verificar sus versiones. El mundo y los menús pueden no estar listos cuando el archivo está cargado; registrar callbacks y leer una nave existente son diferentes etapas.

XML
<addon name="wiki_example">
  <environment type="menus">
    <file name="ui/wiki_example.lua" />
  </environment>
</addon>

Una ventana personalizada#

Usar la Guía de la ventana del ayudante para texto y botones, o un API de configuración una nueva interfaz puede mantenerse sola; una extensión de una acción existente debería comenzar desde el devolución de llamada estándar del menú.

No bloquear la renderización#

Los manipuladores deben regresar rápidamente. Esperar en un bucle congela a UI. Utilice un evento y un resultado separado para los cambios del mundo en lugar de repetir la operación en cada actualización de la mesa.

Ciclo de vida#

Instale los manejadores una vez por contexto. Volver a hacer referencias después de cargar o reconstruir el menú, y evite acumular envolturas. El ejemplo rechaza las callbacks de una instancia de adaptador obsoleta. Esa comprobación no desregistrar el manejador; frames libres y estado transitorio por separado.

LUA
WikiPanel = {}
local instance = WikiPanel
RegisterEvent("Wiki.Example", function(_, payload)
    if WikiPanel ~= instance then return end
    -- Обработка относится к актуальному экземпляру.
end)

Lecturas relacionadas#

Lua ↔ MD, ventanas personalizadas y extensiones estándar de la UI.