Selector是一个特殊命令的标识符
这应该是一个唯一的字符串标识符。不允许使用具有相同标识符但不同有效负载类型的多个选择器,这可能导致 Command: : get 和 get _ uncheck 出现恐慌。
Type 参数 T 指定命令的有效负载类型
某些选择器是由druid定义的,并且对框架有特殊的意义; 它们在druid: : commands 中列出
pub const NOOP: Selector
一个什么都不做的选择器
pub fn to(self, target: impl Into<Target>) -> Command
将其转换为具有指定 Target 的命令。
pub const fn new(s: &'static str) -> Selector<T>
用给定的字符串创建一个新的 Selector。
pub fn with(self, payload: T) -> Command
这个选择器为 Command: : new 提供了方便的方法。
如果有效负载是() ,就不需要调用这个函数,因为 Selector < () > 实现 Into < Command > 。
默认情况下,该命令将具有 Target: : Auto。
选择器和AppDalegate使用
AppDalegate提供用于处理和修改顶级事件的挂钩的类型。
AppDalegate是一种特性,允许在事件传递到小部件树之前处理和修改事件。
对于窗口和菜单管理来说,这是一个很自然的地方。
可以通过在自己的类型上实现其方法来自定义 AppDalegate。
pub fn event(
&mut self,
ctx: &mut DelegateCtx<'_>,
window_id: WindowId,
event: Event,
data: &mut T,
env: &Env
) -> Option<Event>
此函数接收所有非命令事件,然后再向下传递。
这个函数的返回值将在树中传递。这可以是传入的事件、不同的事件或没有事件。在所有情况下,update ()方法都将像往常一样调用。
pub fn command(
&mut self,
ctx: &mut DelegateCtx<'_>,
target: Target,
cmd: &Command,
data: &mut T,
env: &Env
) -> Handled
应用委托命令处理程序。
这个函数在每个(Target,Command)对被发送到树之前被调用。
如果您的实现返回 Handled::No,该命令将沿小部件树发送。否则不会。
要做比这更复杂的事情,您可以通过 DelegateCtx::submit_command 提交任意命令。
pub fn window_added(
&mut self,
id: WindowId,
data: &mut T,
env: &Env,
ctx: &mut DelegateCtx<'_>
)
窗口创建事件的处理程序。该函数在添加窗口后调用,允许您自定义应用程序的窗口创建行为。
pub fn window_removed(
&mut self,
id: WindowId,
data: &mut T,
env: &Env,
ctx: &mut DelegateCtx<'_>
)
窗口删除事件的处理程序。此函数在窗口被删除后调用。
下一章使用选择器和AppDelegate实现异步处理
效果图