你的第一个 Dojo 应用程序

tutorials/001_static_content/index.md

commit 3e0f3ff1ed392163bc65e9cd015c4705cb9c586e

{% section 'first' %}

你的第一个 Dojo 应用程序

概述

通过学习本教程,你将了解如何创建你的第一个 Dojo 程序,并使用它在浏览器上打印一段简短信息。

前提

你可以打开 codesandbox.io 上的教程 或者 下载 示例项目,然后运行 npm install

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

你也需要熟悉 TypeScript 语言, 因为 Dojo 是基于 TypeScript 语言开发的。

{% section %}

启动开发服务器

{% task '构建并运行应用程序。' %}

在开始修改源代码之前,我们先启动开发服务器,如此就可以实时查看修改代码变化带来的变化。 在程序的根目录运行以下命令:

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

或者使用缩写参数:

dojo build -m dev -w memory -s

现在,打开浏览器并导航到 http://localhost:9999 查看当前应用程序。

接下来,我们开始定制应用程序。

{% section %}

页面内容

{% task '改变页面中显示的内容。' %}

为了开始定制应用程序,我们先删掉已有的内容。 需要调整两个地方。 第一行,index.html 文件中的 “Welcome to biz-e-core”。

{% instruction '打开 src 文件夹中的 index.html 文件,删除 <p> 标签及其内容 “Welcome to biz-e-corp”。' %}

注意,页面已自动刷新。 这意味着我们不需要中断我们的工作,去刷新或重新构建程序,就可以实时查看调整后的效果。

现在我们删掉 “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 });

可能现在看看不懂部分代码,但看完后面的教程后,你将逐步了解。 现在我们重点了解这行代码:

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

v 函数指示 Dojo 创建一个 HTML 元素,这段代码创建一个 <div> 元素, 并在其中添加文字 “Hello, Dojo World!”。 我们接下来将构建一个页面,在这个页面中能查看 Biz-E 公司的员工列表, 所以我们将标签和消息修改为更合适的内容。

{% instruction '使用 <h1> 标签替换掉 <div> 标签,并用 “Biz-E-Bodies” 替换掉 “Hello, Dojo World!”' %}

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

现在,我们再回过头来看 v 函数。我们有意避免使用 document.createElement 来创建 DOM (Document Object Model) 元素。这是因为我们不会直接创建 DOM 元素。相反,我们用 TypeScript 创建一个视图(view)的表现层,然后 Dojo 能高效的将这个视图转换为 DOM 元素,并在页面中渲染出来。这个渲染技术就是所谓的 virtual DOM。

传统的 web 程序,将 DOM 和 JavaScript 逻辑揉在一起,导致较复杂的应用程序的复杂度提高且效率低下。当构建具有大量的状态和数据更改的应用程序时, 虚拟 DOM 技术能极大简化程序逻辑并提高性能。虚拟 DOM 扮演中间人角色,处在应用程序逻辑和在页面中渲染真正 DOM 节点之间。

Dojo 使用自研的虚拟 DOM 库,提供最高效的与视图中的 DOM 元素交互方式。虚拟 DOM 的另一个好处是它促使你编写出 reactive 风格的代码,而这种风格的代码会简化你的程序。在本教程的最后部分,我们将学习如何为虚拟 DOM 节点设置属性。

{% section %}

虚拟 DOM 属性

{% task '为虚拟 DOM 节点设置属性。' %}

现在我们为早先创建的 HelloWorld.ts 文件中的 <h1> 元素增加属性。v 函数的第二个参数用于传入这些属性。

{% instruction '更新 v 函数调用, 传入 title 属性。' %}

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

{% aside '虚拟 Dom 的 Properties 和 Attributes' %}
虚拟 DOM 系统自动将 string 类型的 properties 作为 attribute,其余的作为 properties 添加到 DOM 节点上。
{% endaside %}

注意,我们在 tag 和内容参数中间添加了一个参数。第二个参数可以往元素中设置任意 attributes 或 properties。这种使用 JavaScript 或 TypeScript 创建 DOM 元素的方法被称为 HyperScript,这种技术应用在很多虚拟 DOM 实现中。

{% section %}

总结

恭喜!您在精通 Dojo 之旅中,迈出了坚实的一步。Dojo 应用程序的组件中,我们开始了解 Dojo 应用程序中的重要组件。

你可以在 codesandbox.io 中打开完整示例或下载项目。

{% section 'last' %}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容

  •   DOM(文档对象模型)是针对 HTML 和 XML 文档的一个 API(应用程序编程接口)。   DOM 描绘...
    霜天晓阅读 3,613评论 0 7
  • 第3章 基本概念 3.1 语法 3.2 关键字和保留字 3.3 变量 3.4 数据类型 5种简单数据类型:Unde...
    RickCole阅读 5,096评论 0 21
  • How-to-quick-getting-started-for-frontend 不经意已一年多不专注前端方面的...
    liujb阅读 737评论 2 13
  • 突然发现有很多的东西都可以写,只是看写的人有没有什么灵感罢了 像我?就没有什么灵感,所以,我就打算出观后感吧 只能...
    蜜颜阅读 150评论 0 1
  • 本人是苦逼学生一个 每天七点就要离寝 六点十分起床 在这五十分钟时间里要完成洗漱 化妆 穿校服 收拾被褥 寝室卫生...
    高思潭阅读 282评论 0 1