WebView2与htmx.js:Win10/Win11系统组件及极简前端开发解决方案

2024-12-20
来源:网络整理

越来越香了。

它们不仅是内置的系统组件,而且还被自动推送安装。即使在少数未安装的系统上 - 使用中的 web.view 也会自动安装(无需编写任何代码)。

我用它开发过很多项目,不得不说它稳定可靠,性能强大,界面简洁,真是省心。

.js

这里有一个适合使用的极简前端组件htmx.js。该组件最大的特点是简单、一次学会、易于理解。

我们浏览网页的正常流程是在浏览器中输入URL,并向HTTP服务器发送请求。然后服务器返回 HTML 代码,浏览器显示该页面。

然而htmx.js却非常有创意,网页上的每个HTML节点都可以向服务器发送请求并获取HTML,并实时更新页面上的指定节点。并且无需编写任何代码。

开始

首先我们打开,创建一个项目并选择htmx.js模板:

生成的工程如下:

点击“运行”直接测试效果,点击“发布”生成独立的EXE文件。

在项目管理器中右键单击“网页”弹出菜单,然后单击“使用外部编辑器打开”。如果安装了VS Code,将使用VS Code打开网页目录。

单击并在 VS Code 中打开 .html 源代码:

htmx.js 基础知识

打开.html,先看一个最简单的htmx.js示例:

点这里发送 GET 请求

请注意,所有以“hx-”为前缀的属性都在 htmx.js 中使用。

hx- 用于指定事件发生时触发HTTP请求,例如:

hx-trigger="click"

表示当点击事件发生时触发请求。

hx- 可以使用标准网页事件名称。常用的事件如下:

也可以在事件名称后添加修饰符。例如修饰符once表示只允许触发一次:

hx-trigger="click once"

其他事件装饰器:

以下 HTML 使用多个事件装饰器:

这意味着当松开按键( )且文本框内容发生变化( )时触发,并延迟 500 毫秒后发送请求。

小程序前端开发加上java后端_前后端开发怎么配合_前后端开发工具

hx-get 指定请求哪个后端页面,例如:

hx-get="/api/index.aardio"

表示当事件触发时,页面“/api/”。被要求。由于启动SPA应用时,后端根目录被自动指定为“/web”,因此实际请求为“/web/api/”。

hx-swap指定将返回的HTML写入哪里,“”指定更新网页节点内部HTML,“”指定替换目标网页节点的所有HTML,其他包括“”、“”、“”、“ “ , “没有任何” 。看名字就知道它们是做什么的,我就不解释了。

hx-属性使用CSS选择器来指定要写入的网页节点,例如:

hx-target="#info-div"

指定服务器返回的 HTML 写入 id 为“info-div”的节点。如果省略hx-属性,则写入目标是当前节点本身。

hxmx.js更新HTML时,如果发现新旧HTML中ID相同的元素,就会进行优化并平滑显示。

看到这里,你已经知道如何使用htmx.js了。

虽然htmx.js文档中有更多奇特的用法,但它们可能并不通用。有些事情搞得太复杂并不一定是好事。

htmx.js + 后端

它提供了嵌入式HTTP服务器,可以直接使用代码编写网页,并且支持类似PHP的模板语法。

模板语法很简单,代码写在里面,HTML代码写在外面。其实就是将外部代码转换成函数的参数。

例如,服务器端有如下代码:

abc

运行后会自动转换为纯代码如下:

print("abc"); response.write("123");

在HTTP后端,该函数实际上指向用于向HTTP客户端输出数据的.()函数。

HTTP 后端有两个最常用的对象。该对象包含所有HTTP请求信息,该对象是HTTP响应对象,用于向客户端发送数据。

打开内置的“工具>库函数文档”,点击文档可以查看该对象的所有属性和方法。所有 HTTP 服务器实现都是统一兼容的。文档指定了用法。

也可以参考起始页的《网站开发与开发入门教程》。关于模板语法,请参考“语法与使用手册>语言>模板语法”

模板语法不仅可以用于编写 HTTP 后端,也可以用于输出 HTML,实际上可以用于生成任何字符串。 C# 中的许多函数都支持此模板语法。例如,在运行时编译 C# 代码支持使用模板语法生成 C# 代码。另外提供了.()函数直接解析模板并返回字符串。

htmx.js 定向动画,后端线程

这里需要注意的是,上面示例项目中默认导入的HTTP服务器是:

wsock.tcp.simpleHttpServer;

这是一个多线程 HTTP 服务器,每次请求时执行的代码都在后台线程中运行。多线程开发需要注意的是,每个线程运行在独立的环境中,全局变量相互隔离。这个限制实际上让多线程开发更加简洁,陷阱也更少。详细信息请参考附带的“示例程序>语言>多线程”。

如果改为.tcp.,则为单线程异步HTTP服务器。

下面我们仍然使用默认的。多线程的优点是耗时操作不会冻结界面。当后端执行耗时操作时,网页前端通常需要显示动画。 htmx.js 使这变得非常简单。

我们只需要简单修改前面提到的网页代码如下:

点这里发送 GET 请求

前后端开发怎么配合_前后端开发工具_小程序前端开发加上java后端

主要是添加hx-属性。该属性的值使用 CSS 选择器来指定发送 HTTP 请求时要显示的 HTML 元素。此处指定 id 为“”的元素。

其实我们可以自定义这个请求动画的样式。我们打开样式文件.css并添加以下样式:

.htmx-indicator{ display:none; } .htmx-request.htmx-indicator{ display:inline; }

发送请求时,CSS类“htmx-”将自动添加到网页上设置的指示符元素中,并且当HTTP请求结束时该类将被删除。

然后我们打开对应的后端代码/web/api/。并输入以下代码:

上面代码的作用是:如果收到GET请求,线程会休眠2秒,模拟一个耗时的操作。然后输出当前时间。

我们运行一下看看效果:

请求参数

如果htmx.js中提交请求的节点是表单控件,只要指定name属性——请求参数就会自动以该名称发送,参数值为该控件的值。

如果提交请求的节点是表单,那么HTTP请求参数就是表单中所有控件的值。

您还可以使用 JSON 对象在节点的 hx-vals 属性中指定请求参数。例如网页是这样写的:

点这里发送 GET 请求

后端可以使用:

request.get["myval"]

分享