`
biti910
  • 浏览: 1701 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

添加一个现场编辑器

阅读更多

另一个典型的Ajax功能是现场(In-place)编辑器。如果你是一个Flickr(http://flickr.com)用户,那么你知道可以通过单击想要改变的信息,来编辑自己照片的描述内容及标题。如果你拥有适当的许可,那么文本将转化成一个文本框,允许你在一个页面上查看和编辑数据库的记录,这样使编辑信息的过程既简单又快捷。

你可以用一个名为in_place_editor的简单helper在Rails中实现同样的功能。in_place_editor helper带有一对儿参数:第一个是包含了要更新数据的元素的名字,第二个是一个选项hash,其中最重要的是action的URL,它将接收Ajax的调用。

为了证明这一点,我们将让拥有事件的用户可以在现场编辑事件地址。打开在app/views/events/_event.rhtml中的事件详情局部模板,将下列代码:

<ul>

<li><%=h event.occurs_on %></li>

<li><%=h event.location %></li>

</ul>

替换成源码7-18所示的代码。

源码7-18 添加in_place_editor helper到app/views/events/_event.rhtml

<ul>

<li><%=h event.occurs_on %></li>

<li><span id="event_location_<%= event.id %>"><%=h event.location %></span></li>

</ul>

<%= in_place_editor("event_location_#{event.id}",

:loading_text => "Saving...",

:cancel_text => "Cancel",

:save_text => "Save",

:url => { :action => "update_location",

:id => event }) if event.owned_by? current_user %>

首先我们需要把location项包裹到一个<span>元素中,并赋给它一个特定的id属性,这样它就可以被唯一识别。为了实现这点,我们用一小条ERb将event.id(我们知道它是唯一的)添加到event_location的末尾:

<span id="event_location_<%= event.id %>">

这会使元素id值,如event_location_1和event_location_2。当我们告诉in_place_editor方法要工作在哪个元素上时,做法是一样的:

<%= in_place_editor("event_location_#{event.id}", #...) %>

in_place_editor接受了选项,而这些选项用来自定义显示在提交按钮和取消链接上的文本。我们把它们设成合理的值:Cancel(取消)和Save(保存)。最后,我们用url选项来定义单击Save按钮时,要调用的action。还要注意,我们是如何在调用后,把一个if 修饰符应用到in_place_editor,以确定事件是被当前登录的用户所拥有。这样会有效地使现场编辑只能为事件拥有者所用。

当单击Save按钮时,in_place_editor表单将被序列化并把文本框中的值以参数方式发送到服务器。控制器action需要对值进行处理并在响应中返回更新的值。为了实现这点,我们需要在控制器上创建一个更新action来处理请求,这便是我们下一步要添加的内容。

当用in_place_editor执行update action时,我们需要注意一个特定的惯例:action应被命名为update_field_name,而field_name是要更新的项的名字。因为我们更新的是location项,所以我们的方法将被称为update_location。为events控制器添加update_location action,如源码7-19所示。

源码7-19app/controllers/events_controller.rb中添加update_location action

def update_location

Event.update(params[:id], {:location => params[:value]})

render :text => params[:value]

end

这将在使用render :text渲染输入的值之前,把id与params[:id]相匹配的事件更新成改变了的location值——有效地将之前的地址替换成新输入的值。

既然一切都设置好了,那么是时候享受我们的劳动成果了,来看看现场编辑器的工作情况。运行应用程序,重新载入事件列表,并选择一个事件。当你点击事件地址时,它应变成一个文本项,允许你在页面上编辑并保存地址,如图7-8所示。

分享到:
评论

相关推荐

    ABAP 屏幕设计中添加文本编辑器

    CL_GUI_TEXTEDIT 是 ABAP 中的一个文本编辑器类,用于处理文本输入和输出。在本例中,我们使用 CL_GUI_TEXTEDIT 编辑器来处理文本编辑,并将编辑器对象绑定到屏幕上。在 PBO 模块中,我们创建了编辑器对象,并将其...

    百度编辑器里添加按钮

    这篇博文(链接已提供)可能详细介绍了如何在百度编辑器中添加一个用于处理PDF文件的按钮,这对于需要集成PDF操作的项目来说非常有用。 首先,我们需要理解百度编辑器,它是一个开源的富文本编辑器,提供了多种文本...

    fckeditor编辑器添加swfupload功能

    最后,要在FCKeditor的工具栏上添加一个按钮来触发SWFUpload,可以在`fckconfig.js`中找到`ToolbarSets`配置,添加新的按钮并关联到SWFUpload插件。 通过以上步骤,你就成功地在FCKeditor中集成了SWFUpload功能,...

    Qt实现的一个文本编辑器

    【Qt实现的一个文本编辑器】 Qt是一个跨平台的C++应用程序开发框架,广泛用于创建图形用户界面和其他软件。它由The Qt Company维护,并且在开源社区中非常活跃。本项目利用Qt库实现了一个简单的文本编辑器,具备...

    富文本编辑器(可以同时添加文字和图片)

    【富文本编辑器:结合文字与图片的编辑工具】 富文本编辑器是一种允许用户在文本中插入、编辑和格式化文字以及图片的交互式编辑工具。在移动应用开发,特别是Android平台,这样的编辑器功能非常实用,因为它为用户...

    vue+elmentui +ueditor编辑器 +数学公式 de 两个例子删除新增编辑器以及切换编辑器.zip

    总的来说,这个项目展示了Vue.js、ElementUI和UEditor结合使用来创建一个具有数学公式编辑、添加删除编辑器功能的Web应用。通过对项目源码的分析和理解,开发者可以学习到如何在实际项目中有效地集成和管理这些工具...

    编辑器--自己简单实现了一个编辑器

    本项目中,我们自己实现了一个基于HTML5特性的简易编辑器,利用了`contenteditable`属性。这个属性允许我们将任何HTML元素变为可编辑区域,用户可以直接在浏览器内进行文本输入、编辑和格式化。 `contenteditable`...

    图片编辑器,可以放大缩小,添加背景,加注释

    这里提到的是一款由C#编程语言开发的图片编辑器,让我们来深入探讨一下这个项目及其相关的技术知识点。 首先,C#是一种由微软公司开发的面向对象的编程语言,它被广泛用于构建Windows桌面应用程序、Web应用以及游戏...

    征途tbl编辑器,可编辑、添加、删除、修改征途所有tbl文件,

    征途tbl编辑器,可编辑、添加、删除、修改征途所有tbl文件

    SVG编辑器 Qt加C++实现,可放缩的矢量图形编辑器

    SVG编辑器 Qt加C++实现,可放缩的矢量图形编辑器

    简单的C#AGV地图编辑器

    4. **自定义方法**:在编辑器的实现过程中,开发者可能会编写一系列自定义方法来处理地图对象的操作,如添加新的地图元素、保存和加载地图文件、校验地图的合法性等。 5. **事件处理**:在用户与界面交互时,事件...

    幽幽真彩地图编辑器

    总的来说,《幽幽真彩地图编辑器》是一个强大且易用的工具,它为传奇类游戏的制作者们提供了创新和扩展游戏世界的可能性,无论是初学者还是资深开发者,都能从中找到适合自己的功能,创造出令人眼前一亮的游戏地图。

    一个小巧简易的网页编辑器

    "一个小巧简易的网页编辑器"标题暗示了我们正在讨论的是一款轻量级、用户友好的编辑器,它可能旨在简化网页制作过程,使非专业程序员也能轻松上手。 描述中的"看了就知道,可视化html编辑器"进一步揭示了这款编辑器...

    tinymce富文本编辑器集成demo,添加powerpaste插件,支持word、excel带格式粘贴

    PowerPaste是Tinymce的一个插件,专门设计用来处理从Microsoft Office(如Word、Excel)复制到编辑器中的内容。通常,从这些应用程序粘贴的内容会丢失原有的格式,但PowerPaste能够保持原始格式,使得用户可以直接...

    DB数据编辑器.rar

    10. **兼容性**:虽然主要针对SQLite,但有些编辑器也可能支持其他类型的数据库,如MySQL、PostgreSQL等,这样你可以在一个统一的环境中管理不同的数据库。 使用DB数据编辑器,无论是开发人员进行数据库调试,还是...

    HTML table表格编辑器

    至于"200411822562825089.jpg",这可能是一个示例图像,展示了编辑器的界面或功能,帮助用户更好地理解如何操作和使用这个工具。 总结来说,"HTML Table表格编辑器"是一款提高HTML表格操作效率的工具,它通过...

    一个简洁的图片编辑器,适用大部分项目

    这个名为“一个简洁的图片编辑器”的应用,正如其标题所言,旨在提供简单易用但功能丰富的图片处理体验,适用于各种项目需求。描述中提到的“放大器”和“图片水印”功能,是该编辑器的两大核心亮点。 首先,我们来...

    DLL文件编辑器

    综上所述,DLL文件编辑器是一个强大的工具,但使用时需谨慎,以免对系统或应用程序造成不良影响。理解DLL的工作原理和编辑器的功能是确保成功和安全操作的关键。如果你需要对DLL进行修改,建议先进行充分的研究和...

    UE编辑器之快速添加注释

    在UE编辑器中,我们可以通过编写一个Python脚本来实现快速插入这些注释。例如,可以创建一个快捷键绑定,当按下特定组合键时,脚本会自动在光标位置插入相应的注释格式。 C/C++是另一种常用的编程语言,它的注释...

    WZl客户端补丁编辑器

    本文将详细介绍“WZl客户端补丁编辑器”这一实用工具,以及它在游戏运营维护中的应用。 一、补丁编辑器的基本概念 补丁编辑器,顾名思义,是一种用于创建、编辑和管理游戏客户端更新补丁的软件。在游戏开发过程中...

Global site tag (gtag.js) - Google Analytics