当前位置: 首页 > news >正文

【Tauri2】011——菜单menu(2)

前言

前面简单地创建了菜单,接下来就来试试菜单中的action

Rust中菜单项注册action

AppHandle in tauri - Rusthttps://docs.rs/tauri/2.4.0/tauri/struct.AppHandle.html#method.on_menu_event这就需要用到App或者AppHandle中的方法on_menu_event

#[must_use]
#[cfg(desktop)]
pub fn on_menu_event<F: Fn(&AppHandle<R>, MenuEvent) + Send + Sync + 'static>(
    mut self,
    f: F,
  ) -> Self

第一个参数是f,f的泛型是F

F的约束,有函数trait Fn表示闭包可调用多次,不需要可变

闭包的参数,第一个是AppHandle,第二个是MenuEvent。

返回Self。

这个MenuEvent,就只有一个方法id

#[derive(Debug, Clone, Serialize)]
pub struct MenuEvent {
  /// Id of the menu item which triggered this event
  pub id: MenuId,
}

而这个id是MenuId这个结构体,实现了AsRef这个trait

impl AsRef<str> for MenuId {
    fn as_ref(&self) -> &str {
        self.0.as_ref()
    }
}

因此在事件中访问id写法如下

event.id().as_ref()

或者

event.id().0.as_str()

就可以得到id的字符串切片,在通过match或者if let,在里面写action

最后简单的代码如下,在menu.rs中

pub fn create_menu(app: &AppHandle) ->Result<Menu<Wry>> {
    let print=MenuItem::with_id(
        app,
        "print",
        "打印",
        true,
        None::<&str>
    )?;

    let menu=Menu::new(app)?;
    menu.append(&print)?;
    app.on_menu_event(|app,event| {
        match event.id().as_ref() {
            "print" => {
                println!("打印");
            }
            _ => {}
        }
        
    });
    Ok(menu)
}

很简单。结果如下

在前端实现菜单项的action

这个更简单,在前端TypeScript中

从接口MenuItemOptions中,可以发现一个可选参数action是个函数

export interface MenuItemOptions {

    id?: string;

    text: string;

    enabled?: boolean;

    accelerator?: string;

    action?: (id: string) => void;
}

函数中有一个参数id是字符串,简单写一下。

    const menuItems = {
            id: "first",
            items: [
                {
                    id: "first-item",
                    text: "First",
                    action: (id: string) => {
                        console.log("clicked id: " + id);
                    }
                }
            ]
        } as MenuOptions;

感觉写前端更简单点。

相关文章:

  • 什么是 Java 泛型
  • 0-1背包问题和最长公共子序列
  • Java打卡-Day23-文件、IO流
  • 探索 Kubernetes 网络穿透:如何从外部访问 K8s Pod 地址
  • 【MySQL】InnoDB的索引为什么用B+树而不用B树?
  • Python----计算机视觉处理(Opencv:道路检测之道路透视变换)
  • 蓝桥杯2023年第十四届省赛真题-棋盘
  • stack与queue和deque
  • Unicode统一码及实现方式的全面讲解
  • fbx bip互转 测试OK
  • 容器 = 命名空间 + Cgroups + 文件系统
  • ISIS协议中的数据库同步
  • Ubuntu完整复制其他用户的anaconda及虚拟环境
  • 【工具】Json在线解析工具
  • 【Android Studio】配置教程以及解决过程中的问题(详细版本)
  • Hive(4.3)Hive基础查询完全指南:从SELECT到复杂查询的10大核心技巧
  • 【教学类-102-01】自制剪纸图案(留白边、沿线剪)01
  • 蓝桥23省赛——接龙数列
  • Spring Boot 实现文件秒传功能
  • 小程序28-事件传参-data-*自定义数据
  • 旅游网站的网页设计素材/网络推广和网站推广
  • 网站中的文字滑动怎么做的/电脑培训机构
  • 网站制作零基础学习/友情链接购买平台
  • wordpress插件/长沙seo男团
  • 武汉做网站价格/重要新闻今天8条新闻
  • 商用图片的网站/seo招聘职责