Skip to main content

Component

Trait Component 

Source
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§

Source

fn new() -> Self
where Self: Sized,

Crea una nueva instancia del componente.

Por convención suele devolver Self::default().

Provided Methods§

Source

fn name(&self) -> &'static str

Devuelve el nombre del componente.

Por defecto se obtiene del nombre corto del tipo usando TypeInfo::ShortName.

Source

fn description(&self) -> Option<String>

Devuelve una descripción del componente, si existe.

Por defecto, no se proporciona ninguna descripción (None).

Source

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).

Source

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.

Source

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.

Source

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).

Implementors§