你的第一個 Dojo 應(yīng)用程序

tutorials/001_static_content/index.md

commit 3e0f3ff1ed392163bc65e9cd015c4705cb9c586e

{% section 'first' %}

你的第一個 Dojo 應(yīng)用程序

概述

通過學(xué)習(xí)本教程选酗,你將了解如何創(chuàng)建你的第一個 Dojo 程序昨凡,并使用它在瀏覽器上打印一段簡短信息霉囚。

前提

你可以打開 codesandbox.io 上的教程 或者 下載 示例項目,然后運(yùn)行 npm install银还。

已全局安裝 @dojo/cli 命令行工具。 參考 本地安裝 dojo 文章了解更多信息熊杨。

你也需要熟悉 TypeScript 語言费韭, 因?yàn)?Dojo 是基于 TypeScript 語言開發(fā)的。

{% section %}

啟動開發(fā)服務(wù)器

{% task '構(gòu)建并運(yùn)行應(yīng)用程序涯贞。' %}

在開始修改源代碼之前枪狂,我們先啟動開發(fā)服務(wù)器,如此就可以實(shí)時查看修改代碼變化帶來的變化宋渔。 在程序的根目錄運(yùn)行以下命令:

dojo build --mode dev --watch memory --serve

或者使用縮寫參數(shù):

dojo build -m dev -w memory -s

現(xiàn)在州疾,打開瀏覽器并導(dǎo)航到 http://localhost:9999 查看當(dāng)前應(yīng)用程序。

接下來皇拣,我們開始定制應(yīng)用程序严蓖。

{% section %}

頁面內(nèi)容

{% task '改變頁面中顯示的內(nèi)容。' %}

為了開始定制應(yīng)用程序氧急,我們先刪掉已有的內(nèi)容颗胡。 需要調(diào)整兩個地方。 第一行吩坝,index.html 文件中的 “Welcome to biz-e-core”毒姨。

{% instruction '打開 src 文件夾中的 index.html 文件,刪除 <p> 標(biāo)簽及其內(nèi)容 “Welcome to biz-e-corp”钉寝。' %}

注意手素,頁面已自動刷新。 這意味著我們不需要中斷我們的工作瘩蚪,去刷新或重新構(gòu)建程序泉懦,就可以實(shí)時查看調(diào)整后的效果。

現(xiàn)在我們刪掉 “Hello, Dojo World!” 信息疹瘦。

{% instruction '打開位于 /src 下的 main.ts崩哩。' %}

你將看到以下代碼:

import renderer from '@dojo/framework/widget-core/vdom';
import { v } from '@dojo/framework/widget-core/d';

const r = renderer(() =>
    v('div', [ 'Hello, Dojo World!' ])
);
r.mount({ domNode: document.querySelector('my-app') as HTMLElement });

可能現(xiàn)在看看不懂部分代碼,但看完后面的教程后,你將逐步了解邓嘹。 現(xiàn)在我們重點(diǎn)了解這行代碼:

v('div', [ 'Hello, Dojo World!' ])

v 函數(shù)指示 Dojo 創(chuàng)建一個 HTML 元素酣栈,這段代碼創(chuàng)建一個 <div> 元素, 并在其中添加文字 “Hello, Dojo World!”汹押。 我們接下來將構(gòu)建一個頁面矿筝,在這個頁面中能查看 Biz-E 公司的員工列表, 所以我們將標(biāo)簽和消息修改為更合適的內(nèi)容棚贾。

{% instruction '使用 <h1> 標(biāo)簽替換掉 <div> 標(biāo)簽窖维,并用 “Biz-E-Bodies” 替換掉 “Hello, Dojo World!”' %}

const r = renderer(() =>
    v('h1', [ 'Biz-E-Bodies' ])
);

現(xiàn)在,我們再回過頭來看 v 函數(shù)妙痹。我們有意避免使用 document.createElement 來創(chuàng)建 DOM (Document Object Model) 元素铸史。這是因?yàn)槲覀儾粫苯觿?chuàng)建 DOM 元素。相反怯伊,我們用 TypeScript 創(chuàng)建一個視圖(view)的表現(xiàn)層琳轿,然后 Dojo 能高效的將這個視圖轉(zhuǎn)換為 DOM 元素,并在頁面中渲染出來耿芹。這個渲染技術(shù)就是所謂的 virtual DOM崭篡。

傳統(tǒng)的 web 程序,將 DOM 和 JavaScript 邏輯揉在一起吧秕,導(dǎo)致較復(fù)雜的應(yīng)用程序的復(fù)雜度提高且效率低下媚送。當(dāng)構(gòu)建具有大量的狀態(tài)和數(shù)據(jù)更改的應(yīng)用程序時, 虛擬 DOM 技術(shù)能極大簡化程序邏輯并提高性能寇甸。虛擬 DOM 扮演中間人角色,處在應(yīng)用程序邏輯和在頁面中渲染真正 DOM 節(jié)點(diǎn)之間疗涉。

Dojo 使用自研的虛擬 DOM 庫拿霉,提供最高效的與視圖中的 DOM 元素交互方式。虛擬 DOM 的另一個好處是它促使你編寫出 reactive 風(fēng)格的代碼咱扣,而這種風(fēng)格的代碼會簡化你的程序绽淘。在本教程的最后部分,我們將學(xué)習(xí)如何為虛擬 DOM 節(jié)點(diǎn)設(shè)置屬性闹伪。

{% section %}

虛擬 DOM 屬性

{% task '為虛擬 DOM 節(jié)點(diǎn)設(shè)置屬性沪铭。' %}

現(xiàn)在我們?yōu)樵缦葎?chuàng)建的 HelloWorld.ts 文件中的 <h1> 元素增加屬性。v 函數(shù)的第二個參數(shù)用于傳入這些屬性偏瓤。

{% instruction '更新 v 函數(shù)調(diào)用, 傳入 title 屬性杀怠。' %}

v('h1', { title: 'I am a title!' }, [ 'Biz-E-Bodies' ])

{% aside '虛擬 Dom 的 Properties 和 Attributes' %}
虛擬 DOM 系統(tǒng)自動將 string 類型的 properties 作為 attribute,其余的作為 properties 添加到 DOM 節(jié)點(diǎn)上厅克。
{% endaside %}

注意赔退,我們在 tag 和內(nèi)容參數(shù)中間添加了一個參數(shù)。第二個參數(shù)可以往元素中設(shè)置任意 attributes 或 properties。這種使用 JavaScript 或 TypeScript 創(chuàng)建 DOM 元素的方法被稱為 HyperScript硕旗,這種技術(shù)應(yīng)用在很多虛擬 DOM 實(shí)現(xiàn)中窗骑。

{% section %}

總結(jié)

恭喜!您在精通 Dojo 之旅中漆枚,邁出了堅實(shí)的一步创译。Dojo 應(yīng)用程序的組件中,我們開始了解 Dojo 應(yīng)用程序中的重要組件墙基。

你可以在 codesandbox.io 中打開完整示例或下載項目软族。

{% section 'last' %}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市碘橘,隨后出現(xiàn)的幾起案子互订,更是在濱河造成了極大的恐慌,老刑警劉巖痘拆,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件仰禽,死亡現(xiàn)場離奇詭異,居然都是意外死亡纺蛆,警方通過查閱死者的電腦和手機(jī)吐葵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來桥氏,“玉大人温峭,你說我怎么就攤上這事∽种В” “怎么了凤藏?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長堕伪。 經(jīng)常有香客問我揖庄,道長,這世上最難降的妖魔是什么欠雌? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任蹄梢,我火速辦了婚禮,結(jié)果婚禮上富俄,老公的妹妹穿的比我還像新娘禁炒。我一直安慰自己,他們只是感情好霍比,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布幕袱。 她就那樣靜靜地躺著,像睡著了一般悠瞬。 火紅的嫁衣襯著肌膚如雪凹蜂。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天,我揣著相機(jī)與錄音玛痊,去河邊找鬼汰瘫。 笑死,一個胖子當(dāng)著我的面吹牛擂煞,可吹牛的內(nèi)容都是我干的混弥。 我是一名探鬼主播,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼对省,長吁一口氣:“原來是場噩夢啊……” “哼蝗拿!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蒿涎,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤哀托,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后劳秋,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體仓手,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年玻淑,在試婚紗的時候發(fā)現(xiàn)自己被綠了嗽冒。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡补履,死狀恐怖添坊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情箫锤,我是刑警寧澤贬蛙,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站谚攒,受9級特大地震影響阳准,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜五鲫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望岔擂。 院中可真熱鬧位喂,春花似錦、人聲如沸乱灵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽痛倚。三九已至规婆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背抒蚜。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工掘鄙, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人嗡髓。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓操漠,卻偏偏與公主長得像,于是被迫代替她去往敵國和親饿这。 傳聞我的和親對象是個殘疾皇子浊伙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評論 2 355

推薦閱讀更多精彩內(nèi)容

  • ??DOM(文檔對象模型)是針對 HTML 和 XML 文檔的一個 API(應(yīng)用程序編程接口)嚣鄙。 ??DOM 描繪...
    霜天曉閱讀 3,649評論 0 7
  • 第3章 基本概念 3.1 語法 3.2 關(guān)鍵字和保留字 3.3 變量 3.4 數(shù)據(jù)類型 5種簡單數(shù)據(jù)類型:Unde...
    RickCole閱讀 5,128評論 0 21
  • How-to-quick-getting-started-for-frontend 不經(jīng)意已一年多不專注前端方面的...
    liujb閱讀 744評論 2 13
  • 突然發(fā)現(xiàn)有很多的東西都可以寫串结,只是看寫的人有沒有什么靈感罷了 像我?就沒有什么靈感奉芦,所以,我就打算出觀后感吧 只能...
    蜜顏閱讀 153評論 0 1
  • 本人是苦逼學(xué)生一個 每天七點(diǎn)就要離寢 六點(diǎn)十分起床 在這五十分鐘時間里要完成洗漱 化妝 穿校服 收拾被褥 寢室衛(wèi)生...
    高思潭閱讀 298評論 0 1