4.实现你的应用壳
任何项目都有很多方法开始,我们通常建议使用Web Starter Kit。但是,在这个栗子中,为了保持我们的项目足够简单并且专注于PWA应用,我们将提供所有的你将需要的资源。
学习更多关于Web Starter Kit
创建应用壳的HTML
现在我们将添加我们在前一节(设计你的应用壳)讨论过的核心组件。
记住,核心组件是由如下部分组成:
- 有标题和添加刷新按钮的头部;
- 预报卡片的容器;
- 一个预报卡片的模板;
- 一个添加新城市的对话框;
- 一个加载提示器;
index.html这个文件已经存在于你的work文件夹下面,它长得像下面这个样子(下面的代码是实际内容的一部分,不要复制这些代码到你的文件中去):
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Weather PWA</title>
<link rel="stylesheet" type="text/css" href="styles/inline.css">
</head>
<body>
<header class="header">
<h1 class="header__title">Weather PWA</h1>
<button id="butRefresh" class="headerButton"></button>
<button id="butAdd" class="headerButton"></button>
</header>
<main class="main">
<div class="card cardTemplate weather-forecast" hidden>
. . .
</div>
</main>
<div class="dialog-container">
. . .
</div>
<div class="loader">
<svg viewBox="0 0 32 32" width="32" height="32">
<circle id="spinner" cx="16" cy="16" r="14" fill="none"></circle>
</svg>
</div>
<!-- Insert link to app.js here -->
</body>
</html>
注意,加载提示器默认可见。这是为了确保在页面加载时用户能够立刻看到加载提示器,给他们一个明确的提示,内容正在加载中。
为了节省时间,我们已经创建好了样式给你使用。
我们已经提供了html和样式给你,来节省你一点时间并确保你能够在一个好的基础上开始。在接下来的内容中,你将有机会写你自己的代码。
查看关键的JavaScript代码
现在我们的大部分UI都准备好了,是时候让我们的代码跑起来了。像除app壳以外的其余部分,你需要对哪些代码是关键体验所必须的部分,哪些是可以后续加载的保持清醒。
你的work目录已经准备好了,它包含app代码(scripts/app.js), 在这个文件中,年级将找到:
- 一个app对象包含了一些应用必须的关键信息;
- 在头部(添加/刷新)和在添加城市对话框中的(添加/取消)所有按钮的事件监听器;
- 一个添加或者更新预报卡片的方法(app.updagteForecastCard);
- 一个从Firebase公共天气API获取最新天气预报数据的方法(app.getForecast);
- 一个通过调用app.getForecast方法来更新当前卡片数据的方法(app.updateForecasts);
- 你可以用于快速测试渲染过程的伪造数据(initialWeatherForecast);
测试一下
现在你已经得到了主要的HTML, styles和JavaScript,是时候来测试下这个应用了。
为了观察伪造的数据是如何被渲染的,请将你的index.html文件的底部的如下的代码解除注释:
<!--<script src="scripts/app.js" async></script>-->
接下来,将你app.js文件中的底部的如下代码解除注释:
// app.updateForecastCard(initialWeatherForecast);
然后刷新你的应用。结果将是加载提示器消失,呈现完美格式化好的预报卡片(虽然是假的数据,从日期你可以判断得出),如下:
一旦你试过并且验证它能够如预期那样工作,你可以移除调用伪造数据的app.updateForecastCard方法。我们只需要确保一些如预期一样。