pub trait Component:
AnyInfo
+ ComponentClone
+ ComponentRender
+ Send
+ Sync {
// Required method
fn new() -> Self
where Self: Sized;
// Provided methods
fn name(&self) -> &'static str { ... }
fn description(&self) -> Option<String> { ... }
fn id(&self) -> Option<String> { ... }
fn is_renderable(&self, cx: &Context) -> bool { ... }
fn setup(&mut self, cx: &Context) { ... }
fn prepare(&self, cx: &mut Context) -> Result<Markup, ComponentError> { ... }
}Expand description
Interfaz común que debe implementar un componente renderizable en PageTop.
Se recomienda que los componentes declaren sus campos como privados, que deriven
AutoDefault o implementen Default para inicializarlos por defecto, y
Getters para acceder a sus datos. Deberán implementar explícitamente el
método new() y podrán sobrescribir los demás métodos para personalizar su
comportamiento.
§Requisito: derivar Clone
Todo tipo que implemente Component debe derivar también Clone. Aunque el compilador
no lo exige directamente —hacerlo rompería la seguridad de objeto de dyn Component—,
ComponentClone se implementa automáticamente mediante una impl blanket solo para los
tipos que sean Component + Clone + 'static. Sin Clone, habría que implementar
ComponentClone a mano, y el componente no podría registrarse en
InRegion.
Required Methods§
Provided Methods§
Sourcefn name(&self) -> &'static str
fn name(&self) -> &'static str
Devuelve el nombre del componente.
Por defecto se obtiene del nombre corto del tipo usando TypeInfo::ShortName.
Sourcefn description(&self) -> Option<String>
fn description(&self) -> Option<String>
Devuelve una descripción del componente, si existe.
Por defecto, no se proporciona ninguna descripción (None).
Sourcefn id(&self) -> Option<String>
fn id(&self) -> Option<String>
Devuelve el identificador del componente, si existe.
Este identificador puede usarse para referenciar el componente en el HTML. Por defecto, no
tiene ningún identificador (None).
Sourcefn is_renderable(&self, cx: &Context) -> bool
fn is_renderable(&self, cx: &Context) -> bool
Indica si el componente es renderizable.
Por defecto, todos los componentes son renderizables (true). Sin embargo, este método
puede sobrescribirse para decidir dinámicamente si los componentes de este tipo se
renderizan o no en función del contexto de renderizado. Recibe solo una referencia
compartida al contexto porque su único propósito es consultar datos, no modificarlos.
También puede asignarse una función FnIsRenderable a un campo del
componente para permitir que instancias concretas del mismo puedan decidir dinámicamente si
se renderizan o no.
Sourcefn setup(&mut self, cx: &Context)
fn setup(&mut self, cx: &Context)
Configura el estado interno del componente antes de generar el marcado.
Segundo paso del ciclo de renderizado: se ejecuta tras comprobar
is_renderable() y antes de la acción
BeforeRender y de
prepare(). Recibe solo una referencia compartida al contexto porque su
propósito es mutar el propio componente, no el contexto. Por defecto no hace nada.
Sourcefn prepare(&self, cx: &mut Context) -> Result<Markup, ComponentError>
fn prepare(&self, cx: &mut Context) -> Result<Markup, ComponentError>
Genera el marcado HTML del componente cuando ningún tema lo sobrescribe.
Cuarto paso del ciclo de renderizado: se invoca tras
setup() y la acción
BeforeRender, pero solo si ningún tema
en la cadena devuelve Some en
Theme::handle_component().
Se recomienda obtener los datos del componente a través de sus propios métodos para que los
temas puedan implementar handle_component() sin depender de los detalles internos.
Por defecto, devuelve un Markup vacío (Ok(html! {})). En caso de error, devuelve un
ComponentError que puede incluir un marcado alternativo (fallback).