作者:David Walsh
翻译:Siqi (siqi.zhong@gmail.com)
原文:TweetView: Creating the Settings View
在上一篇教程Dojo mobile TweetView 系列教程之三——Tweets和Mentions视图 中,我们夯实了TweetView应用程序的文件结构,回顾了创建TweetView的目标并通过编写tweetview._ViewMixin和tweetview.TweetView创建了Tweets和Mentions视图。本教程将重点介绍TweetView中的"Setting"视图:类的依赖关系、Setting视图是如何和Tweet、Mention视图联系在一起的、并编写Setting视图的代码。
版本:1.6
难度:中级
系列:TweetView
“Settings”视图的依赖关系
Settings视图是三个视图中最简单的。该视图包含两个标题(主标题和副标题),和一个Twitter账户列表,每一个Twitter账户都对应着一个开关用以控制该账户的信息是否需要在其他两个视图中显示。在看过下面的效果图之后,可以知道将会用到以下控件:
- dojox.mobile.ScrollableView - 整个视图
- dojox.mobile.Heading - 主标题"Setting"
- dojox.mobile.RoundRectCategory - 副标题"Show"
- dojox.mobile.RoundRectList - 账户列表容器
- dojox.mobile.ListItem - 账户列表元素
- dojox.mobile.Switch - 开关空间
该效果图还清楚的说明了我们将会需要从Twitter获取用户的头像信息,因此我们还需要一些其他的Dojo资源:
- dojo.io.script - 使用JSONP从Twitter获取信息
- dojo.DeferredList - 让我们可以一次处理多个Twitter信息请求所返回的数据
这些资源将帮助我们顺利完成Settings视图。与我们创建Tweets和Mentions视图的做法类似,我们将为Settings视图创建一个自定义类:SettingsView。
!如果我们不在Settings视图显示用户的头像信息,我们就不需要dojo.io.script和dojo.DeferredList。我们可以写死这些头像图片的路径,但是这样的话我们需要在每次用户更改他们头像时手动更新这些图片的路径。幸运的是我们之前创建的TweetView视图的代码已经包含了这些资源,所以在Settings视图中使用它们不会导致代码膨胀——这些资源提供的类已经可以用啦!
开发Setting视图
我们的SettingsView类和TweetView类非常相似,他们都继承dojox.mobile.ScrollableView和tweetview.ViewMixin。很重要的一点是SettingView类只是一个包装了整个应用程序用以获取账户信息的tweetview.ACCOUNTS对象的容器。在明白了这一点之后让我们看一下Settings视图的具体实现吧。
新的类:Settings视图
我们新的类叫做SettingsView,它的基础结构和TweetView一样:
依赖项已经被导入,我们的类也已经声明完毕。
!该类将被被放在TweetView和_ViewMixin同一个文件夹下:js/tweetview
SettingsView的属性
SettingsView将有三个自定义属性。第一个是accountTemplateString:一个包含HTML标签的字符串,用以表示帐号列表中每一个列表元素的布局。
第二个属性是views,它代表TweetView实例。为什么SettingsView需要知道TweetView实例的ID呢?因为SettingsView需要根据每一个账户的开关状态调整其对应的TweetsView实例中的tweets。views属性接受一个由多个TweetView实例的ID所组成的字符串,每个ID以逗号分隔开。
最后一个自定义属性是serviceUrl:
serviceURL属性代表用来获取用户信息的Twitter服务URL。对于SettingsView来说,我们只需要获取用户的头像。
实现SettingsView
现在SettingsView的框架已经搭好(尽管它现在还干不了什么),是时候更新Settings视图的HTML部分了:
下面是我们所做的改动:
- 该控件的dojoType已经改成了我们的新类:tweetview.SettingsView。
- 设置views属性为“tweets, mentions”;即TweetView和MentionView的ID。
- 为RoundRectList节点添加了tweetviewList CSS类,这样该控件可以被分辨出来,并获取其引用
当然我们需要在我们的app.html页面顶部导入tweetview.SettingsView类
在将SettingsView添加到app.html页面之后,是时候创建JavaScript部分了。
SettingsView _startup()
SettingsView类的startup方法是SettingsView工作的关键。让我们一步步看下去。首先是调用父类(dojox.mobile.ScrollableView)的startup方法来获取原本的功能:
获取视图中list控件的引用,并在添加列表元素之前隐藏它。
创建一个账户数组并将它们排序,这样他们就能按字母顺序在视图中显示了
创建以请求Twitter用户信息返回的Deferred组成的数组:
!你将会看到根据serviceUrl参数和一个包含账户名的对象生成URL。substitue方法继承自_ViewMixin,SettingsView也继承自该类。
在Twitter请求触发之后,获取TweetView空间的引用:
剩下的功能在所有用户信息获取完毕后在dojo.DeferredList的回调函数中实现。对于每一个我们要获取信息的账户,如果账户存在并没有设置保护:
创建一个新的dojox.mobile.ListItem并使用我们的用户信息模板填充它:
为列表元素创建一个dojox.mobileSwitch控件,我们需要考虑账户的启用状态:
为Switch控件添加onStateChange事件,在该事件中将会更新tweetview.ACCOUNTS对象的启用状态。另外,通知TweetView实例帐户的启用状态:
最后,如果我们收到了任何有效帐号,显示Settings列表节点(因为现在它已经有内容了)并刷新每一个视图。
tweetview.Setting的JavaScript代码完成了 ——这个控件现在可以正确工作啦!不过我们还没有完成所有的JavaScript代码!我们还需要为TweetView类实现onUserChange方法。
TweetView更新:onUserChange并从startup()中移除refresh()
我们之所以在SettingsView中调用每个视图的refresh方法,是因为我们不想为那些确定无效的账户向Twitter发出请求。但不幸的是我们之前已经在TweetView的startup中调用了refresh方法。现在让我们移除它:
SettingsView实例将会在确认一个账户是有效的时调用视图的refresh方法。
onUserChange方法在某个账户被启用或者禁用时被SettingsView调用。我们有几种处理启用/禁用的方式:
刷新整个控件 - 会浪费资源和Twitter API的使用率
销毁ListItem控件,并重建它们 - 开销太大,如果用户马上又启用了账户怎么办呢? 那样会导致重新获取所有用户的tweets。这样干的话还会破坏我们的缓存功能。
使用CSS显示/隐藏列表元素 - 就是它了!开销很小,我们已经获取了需要的数据,不需要重复获取它们!
在TweetView中实现这一方法:
还记得user-{screenName} CSS类已经被分配给了tweetview.TweetView中的列表元素么?我们将使用这个CSS类来找出需要被启用/禁用的用户,并为它们移除/添加一个新的名为tweetviewHidden的CSS类,用以将一个列表元素设置为display:none或者display:block。
设置SettingsView样式
HTML和JavaScript部分都已经完成了,现在为我们的样式表添加一些CSS类来使得列表看起来和效果图里的一样:
TweetView 完成了!
tweetview.TweetView在上一篇教程中已经完成,本教程又完成了tweetview.SettingsView,我们的控件已经大功告成了!点这里来查看我们的控件。
在本系列最后一篇教程中我们将使用Dojo的打包系统来压缩TweetView所用的JavaScript,HTML和CSS,使得整个程序更紧凑。
下载代码
下载TweetView
TweetView系列中文教程
Dojo mobile TweetView 系列教程之一 —— dojox.mobile入门
Dojo mobile TweetView 系列教程之二 —— TweetView 启程
Dojo mobile TweetView 系列教程之三 —— Tweets和Mentions视图
Dojo mobile TweetView 系列教程之四 —— 创建Setting视图
分享到:
相关推荐
dojo入门系列教程,包含入门简介,在javascript基础上介绍dojo的语法特色,ajax的dojo包装---xhr框架的编程要点, Dojo 事件机制.以及对dojo最具特色的web UI设计的全面介绍.
《dojo china extjs 视频教程源码》 在当今的Web开发领域,JavaScript框架扮演着至关重要的角色,其中Dojo和ExtJS是备受开发者喜爱的两个库。本教程源码集结合了这两个强大的工具,为学习者提供了一次深入理解它们...
精通Dojo(中文版),之前自己学习的时候看的,质量挺高,百度网盘地址
"dojo教程"针对的是对Dojo感兴趣的初学者,它提供了全面的学习资源,帮助新手快速掌握Dojo的基础和高级用法。Dojo 的学习通常从理解它的模块系统开始,如dojo.declare用于定义类,dojo.require引入所需模块,以及...
《dojo权威入门教程》是一本专注于JavaScript库Dojo Toolkit的学习指南,主要面向Java开发者或对Web前端技术感兴趣的人员。Dojo Toolkit是一个强大的JavaScript框架,它提供了丰富的组件、工具和API,帮助开发者高效...
AJAX架构之Dojo篇 Adding Ajax中文版 (DoJo) DOJO学习笔记(七)-日期控件DropdownDatePicker和DatePicker DOJO常用的验证函数 Dojo with Adobe AIR Dojo 工具包教程 Dojo 快速安装 Dojo和JSON建立无限级...
JavaScript框架高级编程——应用Prototype、YUI、Ext JS、Dojo、MooTools JavaScript框架高级编程——应用Prototype、YUI、Ext JS、Dojo、MooTools
Dojo的核心概念之一是模块化。通过`require`函数,我们可以按需加载所需的模块,这使得代码组织更加有序,同时也提高了页面加载速度。例如: ```javascript require(["dojo/dom", "dojo/on"], function(dom, on){ ...
Dojo Mobile适合于创建轻量级且高性能的移动Web应用,它封装了许多常用的UI控件,这些控件针对移动设备进行了优化,能够提供良好的触摸体验,并且具有较高的响应速度。 开发者在使用Dojo Mobile进行开发时,会遇到...
这个"dojo 官方教程 中文翻译"是针对Dojo框架的全面指南,帮助中文用户更好地理解和应用Dojo。 在Dojo官方教程中,你可以学习到以下核心知识点: 1. **Dojo基础**:了解Dojo的核心概念,如dojo/_base模块,这是...
《实战Dojo工具包》教程 pdf,Dojo是一个品质远远超出“原型建造”的Ajax框架库,本实用教程就是为Dojo而写。她将向我们介绍Dojo开发环境的创建、旅行路线编辑器、DOM和HTML的效果、处理DOM、使用Dojo创建AJAX远程...
AJAX架构之Dojo篇 Adding Ajax中文版 (DoJo) DOJO学习笔记(七)-日期控件DropdownDatePicker和DatePicker DOJO常用的验证函数 Dojo with Adobe AIR Dojo 工具包教程 Dojo 快速安装 Dojo和JSON建立无限级...
《ArcGIS API for JavaScript开发教程+DOJO指南+配置教程》是一份专为开发者准备的综合资源,旨在帮助他们熟练掌握使用ArcGIS API for JavaScript进行Web GIS应用开发,并结合DOJO框架进行高效编程。这份教程特别...
AJAX架构之Dojo篇 Adding Ajax中文版 (DoJo) DOJO学习笔记(七)-日期控件DropdownDatePicker和DatePicker DOJO常用的验证函数 Dojo with Adobe AIR Dojo 工具包教程 Dojo 快速安装 Dojo和JSON建立无限级...
例如,Dojo的Grid组件可以轻松创建动态数据展示表格,而Dialog组件则用于创建弹出对话框。 数据绑定是Dojo中连接UI与数据模型的机制,允许开发者在视图和模型之间建立双向绑定。当模型数据改变时,视图会自动更新,...
2. **dojo/_base**:这是Dojo的基础模块,包含了Dojo的基本功能,如对象创建、事件处理、DOM操作等。例如,`dojo/query`用于选择DOM元素,`dojo/on`用于监听事件。 3. **dojo/ready**:这个模块用于确保DOM加载完成...
随着RIA的兴起,Dojo成为了JavaScript开发者的首选之一,尤其是对于那些有Java背景的开发者,它提供了一种结构化的、面向对象的方式来处理Web前端的复杂性。 Dojo的核心是一个模块化的体系架构,允许开发者按需加载...
这个压缩包包含了Dojo框架的一个早期版本——dojo-release-1.1.2,它对于了解Dojo的历史和学习Ajax应用程序的构建非常有价值。在JavaScript的世界里,Ajax(异步JavaScript和XML)技术允许网页在不刷新整个页面的...