精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

前端工作方式要換了?HTMX簡介:無需JavaScript的動態HTML

開發 前端
HTMX已經存在了一段時間,但它一直是一個不太為人知的項目。它最近被接受到 GitHub Accelerato r中可能會改變這一切。基本的想法是取代那些需要模板化的 JavaScript 和 HTML 交互的常見用例,僅使用HTML語法,而不是 JavaScript。許多交互與HTMX一起變得聲明式。

HTMX允許你使用擴展的HTML語法代替 JavaScript 來實現交互性。HTMX 在標記中直接為你提供HTTP 交互,并支持許多其他交互需求,無需求助于 JavaScript。這是一個有趣的想法,可能最終會影響到web前端的工作方式。讓我們看看如何使用HTMX以及它的吸引力。

什么是HTMX?

HTMX已經存在了一段時間,但它一直是一個不太為人知的項目。它最近被接受到 GitHub Accelerato r中可能會改變這一切。基本的想法是取代那些需要模板化的 JavaScript 和 HTML 交互的常見用例,僅使用HTML語法,而不是 JavaScript。許多交互與HTMX一起變得聲明式。

這聽起來很有前景,不是嗎?每個web開發者都知道有很多常見的模板化用例。HTMX的創建者Carson Gross表示,他希望“完善HTML作為超文本,增加其表現力,使其成為更先進、現代web應用程序的有力競爭者。”

為了快速了解,看看這個HTMX演示。基本上,我們點擊一個按鈕來啟用對用戶對象的字段進行編輯。數據實際上是PUT到一個后端端點。你可以在圖1中看到演示 —— 在你點擊“顯示”后注意底部框架中的網絡交互。

通常,無論你使用什么框架,這都需要某種形式的JavaScriptHTMX 將交互轉變為兩塊標記:一個用于顯示UI,一個用于編輯UI,如Listing 1所示。

Listing 1. HTMX中的用戶更新

<div hx-target="this" hx-swap="outerHTML">
    <div><label>First Name</label>: Joe</div>
    <div><label>Last Name</label>: Blow</div>
    <div><label>Email</label>: joe@blow.com</div>
    <button hx-get="/contact/1/edit" class="btn btn-primary">
    點擊編輯
    </button>
</div>
<!-- 編輯: -->
<form hx-put="/contact/1" hx-target="this" hx-swap="outerHTML">
  <div>
    <label>First Name</label>
    <input type="text" name="firstName" value="Joe">
  </div>
  <div class="form-group">
    <label>Last Name</label>
    <input type="text" name="lastName" value="Blow">
  </div>
  <div class="form-group">
    <label>Email Address</label>
    <input type="email" name="email" value="joe@blow.com">
  </div>
  <button class="btn">提交</button>
  <button class="btn" hx-get="/contact/1">取消</button>
</form>

如果你看Listing 1中的標記,很容易看出發生了什么:hx-swap屬性為編輯前的 div 提供HTML,outerHTML告訴框架它如何與內部的動態內容相關。可編輯版本作為一個表單元素到達,其中包含x-put屬性,該屬性標識PUT HTML方法和要使用的端點。

問題變成,HTMX如何實現這種“交換”和后續的PUT,而不做任何JavaScript呢?答案很簡單:它使用服務器端渲染的HTML作為編輯標記,并將表單封裝抽象到框架中。JavaScript 仍然在幕后工作。實際上,我們得到了一個更細粒度的 HTML 語法,它只能加載片段而不是整個頁面,并且可以提交Ajax請求。

這是DRY原則在行動中的一個有趣的例子。即使使用像React這樣的東西,從一個表單到另一個表單也有一定數量的模板代碼。當然,HTMX并沒有完全消除這一點,但它已經將工作轉移到了服務器上。

HTMX的服務器端

現在,讓我們考慮等式的服務器端。有許多使用HTMX的服務器端技術的例子,因為,正如Gross所說,HTMX是“后端不可知的。它不關心你使用什么后端,只要它產生HTML。” 為了了解它是如何工作的,讓我們看一個使用Express和Pug HTML模板引擎的TODO示例。這個例子是經典TODO應用程序的實現。

首先,現有的待辦事項從Express輸出,命令如下:

res.render('index', { todos: filteredTodos, filter, itemsLeft: getItemsLeft() });

此命令使用內存中的待辦事項集合,并使用一個Pug模板渲染它們,該模板是典型的格式,但它包括驅動HTMX交互的特殊hx-屬性。例如,用于POST新待辦事項的表單顯示在Listing 2中。

Listing 2. 具有HTMX屬性的表單POST

form(hx-post="/todos", hx-target="#todo-list", hx-swap="afterbegin", _="on htmx:afterOnLoad set #txtTodo.value to ''")
  input#txtTodo.new-todo(name="todo",placeholder='需要做什么?', autofocus='')

你可以在這里看到 afterbegin 屬性如何工作,將新內容放在列表中的正確位置。on htmx腳本是 Hyperscript 的一個例子,這是一種簡化的腳本語言。它經常與HTMX一起使用,但并不嚴格屬于HTMX或需要使用它。實際上,on htmx在這里用于處理在創建新的待辦事項后設置輸入表單的值。

作為另一個例子,Listing 3顯示了待辦事項編輯的Pug模板。

Listing 3. 在PUG中編輯服務器端模板

form(hx-post="/todos/update/" + todo.id)
  input.edit(type="text", name="name",value=todo.name)

在Listing 3中,標記使用hx-post屬性來指示發送已編輯待辦事項的JSON的位置。從這些例子中得到的結論是我之前提到的:服務器負責提供HTML(帶有HTMX標簽)的適當大小的塊,以填充前端為其各種交互所需的屏幕的不同部分。HTMX客戶端將根據屬性將它們放在它們應該在的位置,并處理發送由服務消費的適當數據。

負責接收數據的端點可以像典型的端點一樣操作,區別在于響應應該是必要的HTMX。例如,在Listing 4中,你可以看到Express服務器如何處理POST以創建新的待辦事項。

Listing 4. 處理待辦事項創建

app.post('/todos', (req, res) => {
  const { todo } = req.body;
  const newTodo = { 
    id: uuid(),
    name: todo, 
    done: false 
  };
  todos.push(newTodo);
  let template = pug.compileFile('views/includes/todo-item.pug');
  let markup = template({ todo: newTodo});
  template = pug.compileFile('views/includes/item-count.pug');
  markup  += template({ itemsLeft: getItemsLeft()});
  res.send(markup);
});

Listing 4 是一個典型的POST body處理器,它從表單數據中取出值并使用它創建一個新的業務對象(newTodo)。然后,它使用這些值填充Pug模板并將其發送回客戶端,用作前端的Todo列表中的插入。

其他服務器端技術的例子包括使用HTMX與Java世界中的Spring Boot和Thymeleaf以及Python世界中的Spring Boot和Django。

使用HTMX的客戶端模板

HTMX支持的這種模式的一個變種是使用客戶端模板。這是一個在客戶端運行的層,接受來自服務器的JSON,并在那里進行標記轉換。當我問Gross關于使用帶有 JSON的 RESTful 服務時,他指出這是可能的,但前提是REST通常被誤解。

一個相反的問題是,我們如何向服務器提交JSON,而不是默認的表單編碼?再次,有一個擴展可以做到這一點;即,JSON-ENC。

結論

考慮HTMX會導致一堆想法同時到來。結論是這個概念和這個項目本身一樣有益。作為一個成熟的項目的HTMX可能最終不會像今天這樣工作,但它已經證明是一個有益的影響。最吸引人的是處理所有這些非常常見的Ajax風格的請求的想法,這通常意味著使用fetch()或類似的東西,只用一個HTML屬性。這只是更簡單、更干凈,并且將一切都保持在一個地方。很明顯標記做了什么。

我對服務器端標記生成持更加矛盾的態度。開發者習慣于為此目的處理JSON;引入標記只是在客戶端創建中增加了一個步驟。我們已經看到了許多服務器端方法,它們總是似乎模糊了HTML、JavaScript和CSS的強大組合,這三者最終總是勝出。也許這次會不同。這是一個大的擺動。

當然,還有客戶端模板選項,它使服務器成為一個熟悉的JSON發射器。我試圖想象它在一個大型軟件項目中是如何工作的。它會減少大規模項目中的總體復雜性嗎?

Gross對復雜性有自己的想法。你可以看到他的想法在HTMX的設計中得到體現。這項技術希望通過將我們帶回到Hypertext作為web應用程序的狀態機制來簡化事情。這個例子顯示了這個想法的運作。使用JSON作為協議意味著使客戶端更加智能、更加復雜,并使架構變得不那么自描述。

也許它都可以工作。如果我們避免了固有的復雜性,擴展了底層語言HTML,實際上處理現代需求,比如Ajax,我們可以回到一個更簡單的時代。標記將再次成為中心數據描述符,并足以描述UI以及線上的數據。

責任編輯:姜華 來源: 大遷世界
相關推薦

2023-10-07 08:00:00

JavaScriptHTMX

2009-06-22 16:42:26

JSF的工作方式

2009-07-10 13:55:48

Swing控件

2009-07-14 12:47:07

WebWork工作方式

2009-09-28 13:39:01

Hibernate工作

2010-08-06 10:41:59

Flex命名空間

2016-10-27 17:49:07

群暉群暉科技NAS

2009-08-13 18:36:29

C#數組工作方式

2010-07-22 09:01:02

SQL Server鏡

2010-01-25 14:57:49

Android數據庫

2024-05-08 08:20:20

HTMX前端開發

2024-03-27 14:51:23

2023-03-20 15:34:00

ChatGPT人工智能

2011-07-14 13:20:49

Servlet過濾器

2021-12-07 10:18:06

首席信息官技術發展企業管理者

2009-02-25 10:52:00

路由器原理工作方式協議

2022-06-23 09:00:00

JavaScriptHTML應用程序

2024-04-15 08:00:00

生成式AI人力資源ChatGPT

2022-08-29 20:06:04

樓宇自控物聯網

2022-12-02 13:43:54

供應鏈首席供應鏈官
點贊
收藏

51CTO技術棧公眾號

欧美人xxxxx| 久久久久久尹人网香蕉| 亚洲免费黄色网| 91麻豆免费在线视频| 高清在线观看日韩| 在线中文字幕不卡| 天天综合色天天综合色hd| 国产有码在线观看| 日韩视频在线一区二区三区 | 国产免费视频一区二区三区| 国产精品激情| 国产亚洲欧美一区| av在线网站免费观看| 九九色在线视频| 国产欧美精品日韩区二区麻豆天美| 91精品免费久久久久久久久| 91视频免费网址| 91超碰成人| 亚洲免费电影一区| www.久久com| 暖暖成人免费视频| 亚洲影视资源网| 国产精品无av码在线观看| 亚洲欧美精品aaaaaa片| 日本成人a网站| 欧美精品v日韩精品v韩国精品v| 日韩中文字幕在线免费| 黄网站app在线观看| 2021中文字幕一区亚洲| 亚洲最大的av网站| 中文字幕日韩三级片| 91麻豆精品| 欧美国产成人在线| 国产欧美日韩视频一区二区三区| 伊人免费在线观看高清版| 99国产精品99久久久久久粉嫩| 久久久国产视频| 娇妻被老王脔到高潮失禁视频| avtt综合网| 日韩一级片网址| 激情图片qvod| 成人性生交大片免费看午夜| 免费高清在线一区| 5278欧美一区二区三区| 久草视频在线资源| 在线成人超碰| www.久久久久| 九九九视频在线观看| 日韩精品导航| 欧洲一区二区三区在线| 久久国产亚洲精品无码| 51精品在线| 亚洲图片有声小说| 国产午夜精品视频一区二区三区| 五月天婷婷在线视频| 国产一区二区毛片| 成人黄色av网站| 亚洲熟女乱色一区二区三区久久久| 久久精品影视| 日韩在线中文字| 色综合久久久无码中文字幕波多| www.久久草.com| 欧美高清你懂得| 五月六月丁香婷婷| 国产一区二区视频在线看| 正在播放亚洲一区| 亚洲国产日韩在线一区| 精品三级久久久| 日韩精品一区二区三区视频在线观看| 久久久久久国产精品日本| 玖玖玖电影综合影院| 日韩午夜精品电影| 国产精品一区二区无码对白| 九九热hot精品视频在线播放| 亚洲第一区第一页| 野花社区视频在线观看| 国产探花在线精品一区二区| 一本色道久久88亚洲综合88| 福利视频第一页| 91精品啪在线观看国产81旧版| 久久在线精品视频| 国产亚洲精品成人| 亚洲欧美日韩国产一区| 日韩中文字幕国产| 久草视频手机在线| 在线日本高清免费不卡| 欧美最顶级丰满的aⅴ艳星| 日韩人妻精品中文字幕| 麻豆精品久久久| 成人在线免费网站| 欧美孕妇性xxxⅹ精品hd| 国产欧美日韩三级| 欧美在线观看视频免费| 午夜久久中文| 51久久夜色精品国产麻豆| 9.1在线观看免费| 视频一区在线观看| 精品中文字幕乱| www.com国产| 精品一区二区三区免费观看 | 高潮久久久久久久久久久久久久 | 成人国产精品久久久| 性欧美8khd高清极品| 久久久影视传媒| 97超碰免费观看| 久久电影tv| 亚洲一二三区在线观看| 国产a视频免费观看| 2019中文亚洲字幕| 亚洲免费精彩视频| 久久久久亚洲AV成人| 米奇777在线欧美播放| 久久久久久中文| 乱子伦一区二区三区| 91久久黄色| 97久久超碰福利国产精品…| 成人黄色激情视频| 岛国精品在线观看| 午夜欧美性电影| 中文字幕中文字幕在线中高清免费版| 激情成人中文字幕| 中文字幕66页| 成人久久精品| 伊人亚洲福利一区二区三区| 私库av在线播放| 天堂成人免费av电影一区| 久久午夜a级毛片| 久久久久99精品| 蜜桃久久av一区| 日韩av高清在线播放| 色婷婷在线播放| 在线视频欧美精品| 色婷婷精品久久二区二区密| 五月综合激情| 欧美亚洲视频一区二区| 亚洲精品911| 国产精品卡一卡二卡三| av观看免费在线| 高清欧美性猛交xxxx黑人猛| 久久婷婷国产麻豆91天堂| 日韩欧美一级视频| 国产一区91精品张津瑜| 亚洲二区三区四区| 电影一区二区三区| 亚洲第一精品自拍| 欧美国产日韩综合| 国产高清精品网站| gogogo免费高清日本写真| 日本а中文在线天堂| 日韩视频一区二区在线观看| 国产wwwwxxxx| 久久这里有精品15一区二区三区| 国产精品久久久久久久天堂第1集 国产精品久久久久久久免费大片 国产精品久久久久久久久婷婷 | 国内精品一区视频| 午夜精品影院在线观看| 999在线观看| 欧美伦理影院| 秋霞午夜一区二区| 香蕉视频网站在线| 婷婷国产v国产偷v亚洲高清| 中国黄色a级片| 亚洲精品字幕| 精品国产综合久久| www555久久| 欧美大片一区二区| 强行糟蹋人妻hd中文| 精品无人码麻豆乱码1区2区 | 成人免费在线观看入口| 老头吃奶性行交视频| 国产区精品区| 日韩av免费网站| 成人h动漫精品一区二区下载| 香蕉国产精品偷在线观看不卡| 成人高清视频观看www| av激情在线| 日韩欧美美女一区二区三区| 青娱乐免费在线视频| 久久激情五月激情| 中文字幕在线中文字幕日亚韩一区| 日本成人在线网站| 久久精品欧美视频| 天堂网在线资源| 欧美日韩国产一中文字不卡 | 激情五月婷婷网| 国产日韩在线不卡| a在线观看免费视频| 欧美wwwww| 国产主播在线一区| 黑人极品ⅴideos精品欧美棵| 日韩欧美另类在线| 国产精品一区二区三区四| 久久久国产精品午夜一区ai换脸| 亚洲中文字幕无码不卡电影| 成人在线免费小视频| 亚洲一区免费网站| 国产极品人妖在线观看| 亚洲美女久久久| 成年人晚上看的视频| 亚洲精品v日韩精品| 偷偷色噜狠狠狠狠的777米奇| 久久福利精品| 一本久久a久久精品vr综合| 日日夜夜精品| 4k岛国日韩精品**专区| av在线免费一区| 日韩精品一区二区三区视频在线观看| 亚洲 欧美 日韩 综合| 亚洲国产精品av| 国产精品麻豆入口| 麻豆国产精品一区二区三区 | 性做久久久久久久久久| 日本黄色一区二区| 欧美成人精品欧美一| wwww国产精品欧美| 在线观看中文av| 亚洲欧美视频| 大荫蒂性生交片| 欧美日韩一二三四| 动漫一区二区在线| 精品久久毛片| 日韩av最新在线| 国产成人一级片| 亚洲一区在线观看网站| 老司机精品免费视频| 播五月开心婷婷综合| 国产喷水theporn| 久久免费国产| 久久99久久99精品| 久久国产精品亚洲人一区二区三区 | 一区二区三区色| 中文字幕5566| 成人免费毛片高清视频| 欧美日韩一区二区三区69堂| 亚洲三级网站| 秋霞在线一区二区| 欧美理论视频| 亚洲国产欧洲综合997久久| 欧美黄色影院| 999在线免费观看视频| 国产精品伦一区二区| 日本久久久a级免费| 一区二区精品伦理... | 亚洲最大成人综合网| 不卡视频免费播放| 久久黄色一级视频| 麻豆精品视频在线观看视频| www午夜视频| 日本vs亚洲vs韩国一区三区| 欧美精品一区免费| 国产亚洲精品久久久久婷婷瑜伽| www.黄色网址.com| 99久久久久| 亚洲一卡二卡| 成人三级视频| 日韩三级电影免费观看| 欧美日韩一区二区三区视频播放| 久久久水蜜桃| 欧美人妖在线观看| 国产v亚洲v天堂无码| 婷婷成人av| 亚洲伊人久久综合| 精品视频在线播放一区二区三区| 国产日韩欧美视频在线| www.一区| 深夜福利日韩在线看| 蜜桃免费在线| 亚洲精品美女网站| 人妻丰满熟妇av无码区hd| 欧美色另类天堂2015| wwwav国产| 亚洲尤物视频在线| 久久午夜无码鲁丝片| 一区av在线播放| 九九热国产精品视频| 亚洲国产精品成人久久综合一区 | 精品一区二三区| 在线免费观看日本一区| 高潮无码精品色欲av午夜福利| 色屁屁一区二区| 欧美三级网站在线观看| 在线国产亚洲欧美| 国产精品久久欧美久久一区| 欧美浪妇xxxx高跟鞋交| 国产精品久久777777换脸| 欧美一区二区三区在线看| 人妻一区二区三区| 亚洲欧美在线一区二区| yourporn在线观看视频| 久久精品视频一| 国产淫片在线观看| 97热精品视频官网| 桃色一区二区| 成人黄色片在线| aaa国产精品视频| 亚洲精品自在在线观看| 在线精品小视频| 国产av天堂无码一区二区三区| 经典一区二区| 在线成人av电影| 日韩亚洲国产欧美| 在线免费观看视频黄| 国产精品一区在线观看你懂的| 一级黄色片毛片| 91色在线porny| 国产精品视频一区二区三 | 顶臀精品视频www| 亚洲成av人**亚洲成av**| 无码人妻aⅴ一区二区三区有奶水 无码免费一区二区三区 | 在线播放欧美女士性生活| 国产成人麻豆精品午夜在线| 欧美日韩1234| 可以免费看毛片的网站| 日韩精品在线观看一区二区| 色综合久久久久综合一本到桃花网| 九九热这里只有精品免费看| 91超碰在线播放| 成人在线免费观看视视频| 精品福利一区| 在线看成人av电影| 亚洲一区图片| av免费观看不卡| 国产精品看片你懂得| 久草国产精品视频| 91精品一区二区三区久久久久久 | 亚洲人a成www在线影院| 国产精品剧情一区二区在线观看| 97在线观看免费高清| 99久久久国产| 亚洲精品高清视频| 国产亚洲永久域名| 国产调教打屁股xxxx网站| 中文字幕欧美区| 色老头一区二区| 亚洲国产精品久久91精品| 老司机在线永久免费观看| 欧美亚洲国产成人精品| 精品欠久久久中文字幕加勒比| 伊人久久大香线蕉精品| 久久久久国产精品一区二区| 国产老头和老头xxxx×| 91亚洲男人天堂| 日韩大片免费在线观看| 日韩亚洲国产中文字幕欧美| avav免费在线观看| 国产脚交av在线一区二区| 国产剧情在线观看一区| www.中文字幕在线| www.亚洲在线| 夫妻性生活毛片| 欧美一区二区三区免费| 欧美黑人激情| 国产日产久久高清欧美一区| 真实原创一区二区影院| 亚洲欧洲日产国码无码久久99| 粉嫩一区二区三区性色av| 免费在线观看h片| 欧美视频在线观看一区| 成人高清免费在线播放| 国产99久久精品一区二区永久免费 | 97久久网站| 日韩一二三区不卡在线视频| 免费亚洲网站| 蜜臀av一区二区三区有限公司| 欧美色播在线播放| 蜜桃视频在线免费| 国产精品99久久久久久白浆小说| 一道在线中文一区二区三区| 国产精品久久久久9999小说| 久久久蜜桃精品| 中文字幕在线播| 伊人激情综合网| 精品网站999| wwwjizzjizzcom| 成人午夜短视频| 九九热国产视频| 精品夜色国产国偷在线| 国产精品一区二区av影院萌芽| 玛丽玛丽电影原版免费观看1977| 日日嗨av一区二区三区四区| 亚洲精品成人无码| 91国产精品成人| 免费在线观看av网站| 国产精品久久久久久久久婷婷| 在线观看视频日韩| 欧美一区二区三区成人精品| 一本一道综合狠狠老| 日本高清视频在线播放| 亚洲一区亚洲二区亚洲三区| 亚洲国产一区二区精品专区| 中文字幕5566| 欧美一区二区三区四区高清| 激情影院在线| 久久综合九色综合久99| 麻豆免费看一区二区三区| 国产十六处破外女视频| 亚洲成人三级在线| 人人鲁人人莫人人爱精品| 男同互操gay射视频在线看| 成人av综合在线| 欧美亚洲另类小说|