精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

精品无码国产一区二区三区av| 日韩国产精品一区| 一区精品在线| 麻豆changesxxx国产| 在线日韩成人| 亚洲国产日韩a在线播放| 51国偷自产一区二区三区| 男女免费视频网站| 免费一区二区三区视频导航| 欧美中文字幕亚洲一区二区va在线| 五月天综合网| 国产黄色片av| 久久成人一区| 色播久久人人爽人人爽人人片视av| 91国内在线播放| 懂色av一区| 国产日韩高清在线| 91免费的视频在线播放| 国产亚洲精品久久久久久打不开| av免费在线一区| 亚洲女厕所小便bbb| 狠狠色噜噜狠狠狠狠色吗综合| 亚洲精品男人的天堂| 国产精品久久观看| 精品视频久久久久久久| 亚洲欧美自拍另类日韩| 久草在线资源站资源站| 欧美极品少妇xxxxⅹ高跟鞋| 国产99视频精品免费视频36| 国产成人精品片| 97精品97| 亚洲人成电影在线| 亚洲精品中文字幕乱码无线| 伊人久久精品一区二区三区| 亚洲精品老司机| 久热这里只精品99re8久 | 免费在线观看黄网站| 大色综合视频网站在线播放| 亚洲成人精品久久| 久久精品国产99久久99久久久| 91超碰在线播放| 欧美国产日韩亚洲一区| av噜噜色噜噜久久| 一区二区视频免费| 一区二区三区四区五区在线| 久久国产视频网站| 神马久久久久久久久久久| aa亚洲一区一区三区| 日本高清成人免费播放| 成人性免费视频| 欧美成人免费| av在线一区二区| 成人黄色免费片| 性无码专区无码| 一区福利视频| 欧美黑人一级爽快片淫片高清| 日日碰狠狠添天天爽| 亚洲传媒在线| 日韩精品黄色网| 国产日韩视频一区| 一区三区自拍| 欧美久久婷婷综合色| www午夜视频| 性欧美1819sex性高清| 色综合视频在线观看| 男人用嘴添女人下身免费视频| 丝袜综合欧美| 一个色在线综合| 日韩国产成人无码av毛片| av网站在线看| 亚洲欧美日韩国产另类专区| 中文字幕人成一区| 国产毛片在线| 久久久亚洲精品一区二区三区| 久久综合福利| 激情小说 在线视频| wwww国产精品欧美| 精品一区二区三区国产| 污视频网站免费观看| 99精品久久免费看蜜臀剧情介绍| 狠狠综合久久av| 水莓100在线视频| 久久女同互慰一区二区三区| 久久精品国产99精品国产亚洲性色| www.我爱av| av一区二区三区在线| 久久国产手机看片| 国产高清免费av在线| 国产欧美一区二区精品仙草咪| 日韩av一区二区三区在线 | 亚洲高清久久| 久久久最新网址| 特级毛片www| 日本午夜一区二区| 成人av在线亚洲| 亚洲精品97久久中文字幕| 成人av动漫在线| 91嫩草免费看| 三级国产在线观看| 国产精品二三区| 国产一二三区在线播放| 性欧美又大又长又硬| 黑人欧美xxxx| 黄色片视频在线| 日本一区二区三区视频在线看| 亚洲成人在线网| 午夜男人的天堂| 一区三区在线欧| 久久久国产一区| 黄色片视频网站| 另类欧美日韩国产在线| 国产激情一区二区三区在线观看| 外国精品视频在线观看| 国产日韩欧美亚洲| 欧美精品一区二区视频| 欧美日本网站| 1区2区3区欧美| 日本国产中文字幕| 巨胸喷奶水www久久久免费动漫| 欧美日韩免费观看一区二区三区| 日本亚洲一区二区三区| 好吊妞视频这里有精品| 综合欧美国产视频二区| 懂色av.com| 男女精品视频| 国产精品国产三级欧美二区| 玖玖综合伊人| 亚洲视频免费在线观看| 女人色极品影院| 日韩三级成人| 亚洲欧洲av一区二区| 久久精品免费av| 激情综合五月婷婷| 日本在线高清视频一区| av资源一区| 欧美一区午夜精品| www久久久久久久| 樱桃成人精品视频在线播放| 国产拍精品一二三| 麻豆影视在线| 婷婷丁香久久五月婷婷| gogo亚洲国模私拍人体| 日韩在线观看电影完整版高清免费悬疑悬疑 | 国产一区福利| 一区二区欧美在线| 国内自拍视频在线播放| 国产一区二区三区观看| 免费av一区二区三区| 91九色国产在线播放| 欧美精品色一区二区三区| 波多野结衣福利| 在线播放精品| 波多野结衣久草一区| 91美女视频在线| 欧美影视一区在线| 四虎永久免费在线观看| 性久久久久久| 麻豆一区区三区四区产品精品蜜桃| 香蕉成人app免费看片| 欧美性大战久久久久久久蜜臀| 成人国产精品久久久网站| 国产精品永久| 狠狠色噜噜狠狠色综合久| 欧美卡一卡二| 337p日本欧洲亚洲大胆色噜噜| 91网站免费视频| 欧美激情 亚洲a∨综合| 成人www视频在线观看| 91精品专区| 欧美日韩国产精选| 日韩影院一区二区| 精品综合久久久久久8888| 亚洲国产成人不卡| 日韩一级特黄| 欧美伦理91i| 亚洲精品一区二区三区新线路| 亚洲人成影院在线观看| 亚洲精品无码久久久久久久| 欧美成人精品一区二区三区在线看| 国产精品久久久久久影视| 午夜免费福利在线观看| 欧美一级生活片| 99免费在线观看| 久久久久久久av麻豆果冻| 亚洲人成无码www久久久| 欧美激情久久久久久久久久久| 欧美亚洲免费电影| 邻居大乳一区二区三区| 3d成人h动漫网站入口| 久久精品99国产精| 91麻豆精品视频| www.超碰97.com| 亚州国产精品| 成人a免费视频| 成av人片在线观看www| 亚洲午夜未满十八勿入免费观看全集| 中文字幕无码乱码人妻日韩精品| 亚洲欧美日韩国产成人精品影院 | 美女久久久精品| 亚洲人一区二区| caoporn成人免费视频在线| 欧美亚洲日本黄色| a视频在线免费看| 日韩精品亚洲元码| 国产精品毛片一区视频播| 亚洲欧美日韩一区| 一女三黑人理论片在线| 日日夜夜一区二区| 国产免费色视频| 国产精品18hdxxxⅹ在线| 亚洲**2019国产| 日本福利在线| 亚洲精品久久视频| 中文字幕在线观看精品| 亚洲高清免费在线| 免费成人深夜蜜桃视频| 国产激情一区二区三区四区| 中文字幕乱码人妻综合二区三区 | 亚洲欧美精品伊人久久| 天堂av免费在线观看| 亚洲私人黄色宅男| 久久久久无码精品国产sm果冻| 美女在线视频一区| 激情伊人五月天| 色喇叭免费久久综合网| 国偷自产av一区二区三区小尤奈| 狂野欧美性猛交xxxx| 久久久久久久久久久av| а√中文在线8| 在线观看亚洲视频| 台湾av在线二三区观看| 欧美变态口味重另类| 久久国产香蕉视频| 黑人精品xxx一区一二区| 中国毛片直接看| 国产喷白浆一区二区三区| www.四虎精品| 国产九色精品成人porny| 999精品视频在线| 影音先锋日韩资源| 三级在线免费观看| 欧美先锋资源| 欧美精品国产精品久久久| 精品综合久久88少妇激情| 99久久99久久| 日本精品国产| 亚洲已满18点击进入在线看片| 欧美黄页在线免费观看| 国产不卡在线观看| 蜜桃视频www网站在线观看| 久久久噜久噜久久综合| 2017亚洲天堂1024| 日韩精品在线观看一区| 日韩资源在线| 亚洲精品日韩久久久| 亚洲区小说区图片区| 69成人精品免费视频| 一级aaaa毛片| 91国在线观看| 五月婷婷激情网| 欧美日韩免费看| 1024手机在线视频| 国产欧美一区在线| 中文字幕免费看| 久久久国产一区二区三区四区小说| 国模私拍在线观看| jizz一区二区| 亚洲精品乱码久久久久久久| 高清视频一区二区| 性感美女一区二区三区| 丁香婷婷深情五月亚洲| 亚洲欧美日韩色| 国产电影一区二区三区| 日本人妻一区二区三区| 99精品偷自拍| 又黄又爽的网站| 99久久久精品免费观看国产蜜| 亚洲中文字幕无码av| 久久久欧美精品sm网站| 亚欧精品视频一区二区三区| 久久女同互慰一区二区三区| 公肉吊粗大爽色翁浪妇视频| 日本一区二区三区四区| 91日韩中文字幕| 亚洲精品成人少妇| 国产精品免费av一区二区| 色域天天综合网| 在线观看免费中文字幕| 日韩欧美另类在线| 西西人体44www大胆无码| 亚洲视频网站在线观看| 中文字幕日本在线| 成人97在线观看视频| 美女露胸视频在线观看| 2020久久国产精品| 国产精品一区二区免费福利视频 | 一区二区亚洲视频| 欧美国产二区| 欧美艳星介绍134位艳星| 欧美另类videos| 日韩和欧美的一区| 亚洲国产精品自拍视频| 亚洲美女免费视频| 中文字幕av影视| 亚洲精品自拍第一页| 污污的视频在线观看| 国产精品69久久| 麻豆成人入口| www.国产二区| 国产一区二区精品在线观看| 精品人妻无码一区二区三区换脸| 最好看的中文字幕久久| 蜜臀尤物一区二区三区直播| 欧美精品一区二区久久久| 26uuu亚洲电影在线观看| 国产欧美日韩中文字幕| 国产欧美久久一区二区三区| 免费看毛片的网址| 国产麻豆视频一区二区| 超碰人人人人人人人| 色偷偷久久一区二区三区| 亚洲第一页综合| 美女扒开尿口让男人操亚洲视频网站| 日产精品一区| 精品国产一区二区三区四区精华| 自产国语精品视频| 欧美美女一级片| 欧美国产精品一区二区三区| 波多野结衣啪啪| 亚洲精品一区二区在线| 欧美a级在线观看| 国产91免费视频| 亚洲激情成人| 国产乱淫av片| 亚洲mv在线观看| 人妻一区二区三区四区| 午夜精品久久久久久久男人的天堂| 国产精品亚洲综合在线观看| 特级西西444www大精品视频| 日本不卡中文字幕| 日本成人免费视频| 欧美性xxxxx极品少妇| 91欧美在线视频| 91亚洲精品久久久| 亚洲欧美亚洲| 偷偷色噜狠狠狠狠的777米奇| 亚洲国产精品久久久久秋霞影院| 国产视频一二三四区| www高清在线视频日韩欧美| 免费欧美电影| 中文字幕av导航| 国产精品系列在线播放| 久久综合色综合| 亚洲精品在线观看网站| 伊人网在线播放| 日韩性感在线| 黄色精品一二区| 国产在线欧美在线| 日韩精品视频在线观看网址| 肉色欧美久久久久久久免费看| 日韩理论片在线观看| 久草热8精品视频在线观看| 农村妇女精品一区二区| 337p日本欧洲亚洲大胆色噜噜| 范冰冰一级做a爰片久久毛片| 国内精品二区| 蜜臀99久久精品久久久久久软件| 国产欧美小视频| 欧美二区三区91| wwwwxxxx在线观看| 欧美日韩在线精品| 久久精品国产精品亚洲综合| 精品视频久久久久| 亚洲欧美日韩精品久久奇米色影视| 成人精品国产亚洲| 亚洲在线视频一区二区| 国产传媒久久文化传媒| 国产精品成人av久久| 国产一区二区成人| 亚洲午夜免费| 日本xxxxxxx免费视频| 一区二区三区日本| 精品电影在线| 成人黄视频免费| 日本女人一区二区三区| 久久久综合久久久| 国产亚洲视频中文字幕视频| 伊人久久大香线蕉av超碰| 人妻无码视频一区二区三区| 亚洲精品一二三四区| 天天干天天爽天天操| 成人福利免费观看| 免费国产自线拍一欧美视频| 欧美a级片免费看| 精品亚洲va在线va天堂资源站| 日韩在线观看不卡| 黄色一级在线视频| 国产精品不卡在线观看| 少妇av一区二区| 91麻豆桃色免费看|