跳转到主要内容

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

当您初次登录到 developerWorks 时,将会为您创建一份概要信息。您在 developerWorks 概要信息中选择公开的信息将公开显示给其他人,但您可以随时修改这些信息的显示状态。您的姓名(除非选择隐藏)和昵称将和您在 developerWorks 发布的内容一同显示。

所有提交的信息确保安全。

  • 关闭 [x]

当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

所有提交的信息确保安全。

  • 关闭 [x]

使用 Ajax 技术构建 Web 演示应用程序,第 2 部分: 创建可编辑的 Web 演示

Xin Rang Wang, 资深软件工程师, WSO2 Inc
//www.ibm.com/developerworks/i/p-xrwang.jpg
Xin Rang Wang 是来自中国北京 Lotus Notes/Domino 团队的资深软件工程师。她目前重点研究基于 Domino 的 Web 2.0 技术。
Xin Zheng Wang, 软件工程师, WSO2 Inc
Xin Zheng Wang 是来自中国北京 Lotus Notes/Domino 团队的软件工程师。他目前主要关注基于 Dominois 的技术和 Web 2.0 技术。
Zhi Bo Zuo, 软件工程师, WSO2 Inc
//www.ibm.com/developerworks/i/p-zbzuo.jpg
Zhi Bo Zuo 是来自中国北京的 Notes/Domino Core 团队的软件工程师,他现在主要关注软件全球化和 Web 2.0 技术。
Chao Dong, 软件工程师, WSO2 Inc
Chao Dong 是来自北京的 Notes/Domino Core 团队的软件工程师,他现在主要关注自动化开发和 Web 2.0 技术。

简介: Web 2.0 支持通过重用现有组件而不是重新创建组件,以最小的代码编写量来开发健壮的功能。本系列 第 1 部分 讨论使用一个 Asynchronous JavaScript and XML (Ajax) 框架来创建一个演示应用程序。第 2 部分继续介绍第 1 部分中讨论的框架并向其添加一些功能,使其更容易编辑。阅读这篇文章,了解使用相对较少的代码能够完成多少任务。

查看本系列更多内容

发布日期: 2010 年 2 月 01 日
级别: 初级 其他语言版本: 英文
访问情况 : 2778 次浏览
评论: 


简介

在我们的上一篇文章 “使用 Ajax 技术构建一个 Web 演示应用程序,第 1 部分:开发 Web UI” 中,我们展示了如何在 Web 上构建一个演示 UI。但是,我们只是创建了一个演示界面,用户不能输入和编辑信息。在本文中,我们将添加一些新特性,允许您编辑这个 Web 演示。我们将包括一些常用操作,比如添加一个文本框、更改字体特征等。

添加这些特性主要涉及一个将一些适当的代码行添加到我们的现有框架的函数,因此,本文主要展示添加什么代码和在哪里添加代码。源代码已在一个 Windows® 平台上的 Firefox 3.5.3 中测试,但它应该可以在其他环境中使用。

关于源代码

您不需要 Web 服务器就可以打开 index.html 来观看这个演示。图 1 展示了这个样例应用程序的文件布局。


图 1. 样例代码的文件夹视图
样例代码的文件夹视图显示文件 index.html 的文件夹 css、映像和 js

插入一个文本框

打开 index.html 后,您将看到一个演示 UI,如图 2 所示。


图 2. 用户界面
带有 3 个区域和 New Slide、Delete Slide 和 Insert Tex 按钮的演示窗口

单击 New Slide 按钮创建一个幻灯片以供使用。这将弹出一个窗口,选择 Blank slide


图 3. 选择幻灯片布局
一个带有以下布局选项的窗口:Blank、Title、text、Two columns with title、two columns side-by-side 和 Caption with a text field at the bottom

单击 Insert Text 操作按钮,这将显示一个允许您插入文本的窗口(如图 4 所示)。


图 4. 带有新文本框的编辑器的屏幕截图
带有一个空白幻灯片的 Web 应用程序编辑器的屏幕截图,这个空白幻灯片包含一个新添加的文本框。

现在,请看一看 Insert Text 按钮是如何工作的。文本框是带有特定 CSS 和文本的分区。清单 1 展示了一个文本框定义的样例代码。这个代码可以在 js/toolbar.js 文件中找到。


清单 1. 文本框定义
				
function insertText()
{
 var slide = document.getElementById("slide_" + currentNum.toString(10));
 var textDiv = document.createElement("div");
 textDiv.id = "slideText_" + slideNum.toString(10) + "_" + textNum.toString(10)+"1_t1";
 textDiv.style.cssText = " position: absolute; height: 20%; width: 80%; 
         left: 10%; top: 10%; border: 1px solid #BBBBBB; 
     text-align: center;overflow: hidden;";
 textDiv.style.fontSize = "3em";
 textDiv.contentEditable="true";
 textDiv.ondragstart="true";
 var textNode = document.createTextNode("You insert a text box.");
 textDiv.insertBefore(textNode, null);
 slide.appendChild(textDiv);
 document.getElementById(textDiv.id).focus(); } 
              

使文本框可编辑

在清单 1 中的源代码中,我们将一个 division 属性设置为 true。这样,我们就可以调整文本框的大小、拖动它并在其中输入文本。只需将代码 textDiv.contentEditable="true"; 添加到函数的末尾。您可以在 js/toolbar.js 文件中找到这个完整的函数。


图 5. 一个可编辑文本对象的屏幕截图
带有调整大小手柄的文本框,包含文本 Input text here 和虚线,表明正在调整文本框大小

添加编辑栏操作

拥有一个可编辑的文本对象后,您需要向编辑工具栏添加一些操作,如图 6 所示。这个工具栏实际上是 HTML 页面中的一个表,我们将介绍每个函数的代码。在样例代码(参见 下载)中,您可以在 index.html 中找到所有函数。


图 6. 编辑工具栏的屏幕截图
编辑工具栏的屏幕截图,该工具栏带有各种功能图标,比如粗体、斜体和对齐文本

首先,通过将清单 2 中的代码放置到 js/toolbar.js 文件中来定义一个 cmdExec() 函数。


清单 2. cmdExec() 的定义
				
 function cmdExec(cmd, opt)
 { document.execCommand(cmd,"", opt);
 } 

然后使用以下几个代码样例来为工具栏按钮定义函数。


清单 3. Undo 工具栏按钮的代码
				
 <img hspace="1" vspace=1 align=absmiddle src="images/undo.gif" alt="Undo" 
  onClick="cmdExec('undo')" onMouseOver="button_over(this);" 
  onMouseOut="button_out(this);" onMouseDown="button_down(this);" 
  onMouseUp="button_up(this);" width="23" height="22"
  > 

清单 4 显示 Redo 按钮的代码。


清单 4. Redo 工具栏按钮的代码
				
 <img hspace="1" vspace=1 align=absmiddle src="images/redo.gif" alt="redo" 
 onClick="cmdExec('redo')" onMouseOver="button_over(this);" 
 onMouseOut="button_out(this);" onMouseDown="button_down(this);" 
 onMouseUp="button_up(this);" width="23" height="22"
> 

清单 5 显示更改字体名称的控制代码。


清单 5. 字体选择下拉菜单的代码
				
 <select id="Select2" 
  onchange="cmdExec('fontname',this[this.selectedIndex].value);" 
  name="Select2"
>
    <option selected>Font</option>
    <option value="Arial">Arial</option>
    <option value="Arial Black">Arial Black</option>
    <option value="Arial Narrow">Arial Narrow</option>
    <option value="Comic Sans MS">Comic Sans MS</option>
    <option value="Courier New">Courier New</option>
    <option value="System">System</option>
    <option value="Tahoma">Tahoma</option>
    <option value="Times New Roman">Times New Roman</option>
    <option value="Verdana">Verdana</option>
    <option value="Wingdings">Wingdings</option>
 </select>

清单 6 显示更改字体大小的下拉菜单的代码。


清单 6. 字体大小下拉菜单的代码
				
 <select id="Select3" 
   onchange="cmdExec('fontsize',this[this.selectedIndex].value);" 
   name="Select3"
> 
     <option selected>Size</option> 
     <option value="1">1</option>
     <option value="2">2</option> 
     <option value="3">3</option>
     <option value="4">4</option> 
     <option value="5">5</option> 
     <option value="6">6</option> 
     <option value="7">7</option>
     <option value="8">8</option> 
     <option value="10">10</option> 
     <option value="12">12</option> 
     <option value="14">14</option>
 </select>

清单 7 显示粗体格式按钮的代码。


清单 7. 粗体格式按钮的代码
				
 <img hspace="1" vspace=1 align=absmiddle src="images/Bold.gif" alt="Bold" 
   onClick="cmdExec('bold')" onMouseOver="button_over(this);" 
onMouseOut="button_out(this);" onMouseDown="button_down(this);" 
onMouseUp="button_up(this);" width="23" height="22"
> 

清单 8 显示斜体格式按钮的代码。


清单 8. 斜体格式按钮的代码
				
 <img class="cbtn" hspace="1" vspace=1 
       align=absmiddle src="images/Italic.gif" alt="Italics" 
   onClick="cmdExec('italic')" onMouseOver="button_over(this);" 
   onMouseOut="button_out(this);" onMouseDown="button_down(this);" 
   onMouseUp="button_up(this);" width="23" height="22"
> 

清单 9 显示下划线格式按钮的代码。


清单 9. 下划线格式按钮的代码
				
 <img class="cbtn" hspace="1" vspace=1 align=absmiddle
     src="images/under.gif" alt="Under" onClick="cmdExec('underline')"
     onMouseOver="button_over(this);" onMouseOut="button_out(this);"
     onMouseDown="button_down(this);" 
     onMouseUp="button_up(this);" width="23" height="22"
     >

清单 10 显示删除线格式按钮的代码。


清单 10. 删除线格式按钮的代码
				
 <img class="cbtn" hspace="1" vspace=1 align=absmiddle src="images/Strikethrough.gif" 
    alt="Strike-through" onClick="cmdExec('StrikeThrough')" 
    onMouseOver="button_over(this);" onMouseOut="button_out(this);" 
    onMouseDown="button_down(this);" 
    onMouseUp="button_up(this);" width="23" height="22"
 > 

清单 11 显示创建有序列表格式按钮的代码。


清单 11. 创建有序列表格式按钮的代码
				
 <img class="cbtn" hspace="1" vspace=1 align=absmiddle src="images/numlist.gif" 
     alt="Ordered List" onClick="cmdExec('insertorderedlist')" 
     onMouseOver="button_over(this);" onMouseOut="button_out(this);" 
     onMouseDown="button_down(this);" onMouseUp="button_up(this);"
 > 

清单 12 显示创建无序列表格式按钮的代码。


清单 12. 创建无序列表格式按钮的代码
				
 <img class="cbtn" hspace="1" vspace=1 align=absmiddle src="images/bullist.gif" 
    alt="Unordered List" onClick="cmdExec('insertunorderedlist')" 
    onMouseOver="button_over(this);" onMouseOut="button_out(this);" 
    onMouseDown="button_down(this);" onMouseUp="button_up(this);"
> 

清单 13 显示添加缩进格式按钮的代码。


清单 13. 缩进格式按钮的代码
				
 <img class="cbtn" hspace="1" vspace=1 align=absmiddle src="images/indent.gif" 
     alt="Increase Indent" onClick="cmdExec('indent')" 
     onMouseOver="button_over(this);" onMouseOut="button_out(this);" 
     onMouseDown="button_down(this);" onMouseUp="button_up(this);"
>

清单 14 显示减少缩进(Outdent)格式按钮的代码。


清单 14. 减少缩进格式按钮的代码
				
 <img class="cbtn" hspace="1" vspace=1 align=absmiddle src="images/outdent.gif" 
     alt="Decrease Indent" onClick="cmdExec('outdent')" 
     onMouseOver="button_over(this);" onMouseOut="button_out(this);" 
     onMouseDown="button_down(this);" onMouseUp="button_up(this);"
>

清单 15 添加左对齐格式按钮的代码。


清单 15. 左对齐格式按钮的代码
				
 <img class="cbtn" hspace="1" vspace=1 align=absmiddle 
     src="images/left.gif" alt="Justify Left" onClick="cmdExec('justifyleft')" 
     onMouseOver="button_over(this);" onMouseOut="button_out(this);" 
     onMouseDown="button_down(this);" onMouseUp="button_up(this);"
 > 

清单 16 显示添加中间对齐格式按钮的代码。


清单 16. 中间对齐格式按钮的代码
				
 <img class="cbtn" hspace="1" vspace=1 align=absmiddle src="images/Center.gif" 
     alt="Center" onClick="cmdExec('justifycenter')" 
     onMouseOver="button_over(this);" onMouseOut="button_out(this);" 
     onMouseDown="button_down(this);" onMouseUp="button_up(this);"
>

清单 17 显示添加右对齐格式按钮的代码。


清单 17. 右对齐格式按钮的代码。
				
 <img class="cbtn" hspace="1" vspace=1 align=absmiddle src="images/right.gif" 
    alt="Justify Right" onClick="cmdExec('justifyright')" 
    onMouseOver="button_over(this);" onMouseOut="button_out(this);" 
    onMouseDown="button_down(this);" onMouseUp="button_up(this);"
>


更改主题

由于很多开发人员都不是图形设计专家,因此最好使用内置的主题来帮助用户改进他们的演示的观感。您可以使用一个更改主题 函数来实现这个功能。


图 7. 主题选择
Choose theme 窗口的屏幕截图,显示在 Blank 和 Bubble 主题之间做出一个选择,该窗口拥有一个从浅蓝到白色再到浅绿的背景。

这个 Dojo 窗口的代码如清单 18 所示。


清单 18. 选择主题的 Dojo 代码
				
 <div dojoType="dijit.Dialog" id="themeDialog" title="Choose theme"> 
   <table width="300px" border="0" cellspacing="0" cellpadding="0">
      <tr>
         <td><img onclick="createBlankTheme()" 
                  class="themeImg" src="images/themes/blank_thumbnail.png" /></td>
         <td><img onclick="createBubbleTheme()" 
                  class="themeImg" src="images/themes/bubbles_thumbnail.png" /></td>
      </tr>
   </table>
   </div>


图 8. 应用了主题的演示
展示带有一个使用 Bubble 主题的幻灯片的演示编辑器的屏幕截图,其中显示 Editable Title 和副标题框

清单 19 显示更改为 Bubble 主题的代码。


清单 19. 更改 Bubble 主题的代码
				
 function createBubbleTheme()
 { dijit.byId("themeDialog").hide(); var slide = document.getElementById("slide_" + 
       currentNum.toString(10));
   slide.style.cssText+="background-image:url(images/themes/bubbles.png)";
 }


结束语

在这篇文章中,我们展示了如何使用 HTML 和 JavaScript 来创建一个便于工作的基于 Web 的演示框架。本文继续这个主题,但描述了如何使该演示可编辑并解释了如何添加格式化功能。但是,这个演示仍旧不完整;还可以添加导入和导出功能,这些功能现在仅仅显示为位置标识符。您还可以添加按钮来更改幻灯片的类型,并添加用户在一个演示应用程序中经常发现的其他功能。

但是,本文展示了如何使用 Ajax 通过相对较少的代码为用户创建健壮的、友好的功能。您可以任意改进这个示例,并告知我们您所取得的进展。



下载

描述名字大小下载方法
源代码demo.zip1053KBHTTP

关于下载方法的信息


参考资料

作者简介

//www.ibm.com/developerworks/i/p-xrwang.jpg

Xin Rang Wang 是来自中国北京 Lotus Notes/Domino 团队的资深软件工程师。她目前重点研究基于 Domino 的 Web 2.0 技术。

Xin Zheng Wang 是来自中国北京 Lotus Notes/Domino 团队的软件工程师。他目前主要关注基于 Dominois 的技术和 Web 2.0 技术。

//www.ibm.com/developerworks/i/p-zbzuo.jpg

Zhi Bo Zuo 是来自中国北京的 Notes/Domino Core 团队的软件工程师,他现在主要关注软件全球化和 Web 2.0 技术。

Chao Dong 是来自北京的 Notes/Domino Core 团队的软件工程师,他现在主要关注自动化开发和 Web 2.0 技术。

关于报告滥用的帮助

报告滥用

谢谢! 此内容已经标识给管理员注意。


关于报告滥用的帮助

报告滥用

报告滥用提交失败。 请稍后重试。


developerWorks:登录


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 使用条款

 


当您初次登录到 developerWorks 时,将会为您创建一份概要信息。您在 developerWorks 概要信息中选择公开的信息将公开显示给其他人,但您可以随时修改这些信息的显示状态。您的姓名(除非选择隐藏)和昵称将和您在 developerWorks 发布的内容一同显示。

请选择您的昵称:

当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

(长度在 3 至 31 个字符之间)


单击提交则表示您同意developerWorks 的条款和条件。 使用条款.

 


为本文评分

评论

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Web development
ArticleID=465661
ArticleTitle=使用 Ajax 技术构建 Web 演示应用程序,第 2 部分: 创建可编辑的 Web 演示
publish-date=02012010
author1-email=wangxr_cnnew1@cn.ibm.com
author1-email-cc=
author2-email=wangxinz_cnnew1@cn.ibm.com
author2-email-cc=
author3-email=zuozhibo_cnnew1@cn.ibm.com
author3-email-cc=
author4-email=xxxx_cnnew1@us.ibm.com
author4-email-cc=

标签

Help
使用 搜索 文本框在 My developerWorks 中查找包含该标签的所有内容。

使用 滑动条 调节标签的数量。

热门标签 显示了特定专区最受欢迎的标签(例如 Java technology,Linux,WebSphere)。

我的标签 显示了特定专区您标记的标签(例如 Java technology,Linux,WebSphere)。

使用搜索文本框在 My developerWorks 中查找包含该标签的所有内容。热门标签 显示了特定专区最受欢迎的标签(例如 Java technology,Linux,WebSphere)。我的标签 显示了特定专区您标记的标签(例如 Java technology,Linux,WebSphere)。