ActionView
RJS 模板通过 update_page() 代码块渲染,代码块接受名叫 page 的 Rails JavaScriptGenerator 实例。
在我们这个 "Thought Log" 的例子中,RJS 模板在它执行之前由 ActionView 完成转换。
update_page do |page|
page.insert_html :bottom, 'thoughts', :partial => 'thought'
page.visual_effect :highlight, 'thoughts'
page.form.reset 'thought-form'
end
ActionView 用两行 update_page() 代码块来包装模板的 RJS 代码。
很多 RJS 方法接受可变长度参数列表,options_for_render。如果这个参数是一个 Hash,把参数传递给 ActionView#render()。这允许你用字符串或渲染一个模板更新 DOM 元素。
在 RJS 调用中使用 :partial 选项,你也可以使用其他你在 RHTML 模板常使用的参数
bject 和 :localsthat 。下面这个局部模板能渲染用户信息。
<div id="user">
<p>Name: <%= name %></p>
<p>Title: <%= title %></p>
</div>
这部分需要局部变量 name 和 title,所以你需要在调用 RJS 方法时正确使用参数 :locals 传递一个 hash 。
page.replace_html 'user', :partial => 'user', :locals => { :name => 'Cody Fauser', :title => 'El Presidente' }
Element, Class, and Collection Proxies
当 RJS 第一次提出来的时候,更新页面上 DOM 对象的唯一办法是调用一个页面对象并在 action 中传递期望更新的对象的 id。 Element 和 collection proxies 引入了一个新途径将 DOM 对象和使用 Proxy 设计模式结合起来。proxy 让 RJS 模板可操作一个或多个 DOM 元素。
Element Proxies
element proxy 给 JavaScriptGenerator 增加了 [] 方法。proxy 和 page 对象调用 visual_effect() 方法很像,除了这个方法会在 JavaScript 中产生一个实际 DOM 对象。proxy 对象可以理解页面中的 DOM id。下面的 RJS 模板隐藏的 id 是 header 的 DOM 元素。。
page['header'].hide
当然也可以理解符号,所以如下写法也可以正常工作。
page[:header].hide
proxy 也支持连锁方法,所以你可以定义多个连锁的方法:
page[:header].hide.show
Class Proxies
RJS class proxy 提供使用 JavaScript class 方法。这些方法可能定义在 Prototype 中,例如 class Form,或者定义在你自己的脚本中。而不是根据 DOM 的 id 来选择一个对象,和 element proxies 一样,page 对象在使用 class proxy 时可以使用连锁方法。
一个实际的应用是采用 class proxies 的方式用 Prototype's Form class 处理表单。Form class 支持表单的 disabling, enabling, resetting, 和其他很多功能:
page.form.reset('employee-form') # => Form.reset("employee-form");
然而,class proxies 不是仅仅能依靠 Prototype 工作。你可以利用你自己的静态 JavaScript 方法调用它。也就是说你可以在你的 public/javascripts/application.js 文件中定义 JavaScript class。
var Alerter = {
displayMessage: function(text) {
alert(text);
}
}
使用 Alerter 类定义,你可以在 RJS 模板中使用 RJS class proxying 来调用静态的 displayMessage() 函数。
page.alerter.display_message('Welcome') # => Alerter.displayMessage("Welcome");
class proxies 为结合 JavaScript 提供了一个很好的桥梁,以便你可以压缩你的 JavaScript 库并且在 RJS 中方便的使用。
Collection Proxies
select() 方法返回一批 DOM 对象。select() 根据一个 CSS-based 选择器并且返回一组符合条件的 DOM 对象。所以如果你想得到 id 是 content 的 <div> 中全部的段,可以采用如下方法:
page.select('#content p')
更进一步,你可以:
page.select('#content p').each do |element|
element.hide
end
把 id 是 content 的元素内的所有 <p> 元素均被隐藏。
最近增加了一个支持 attribute-based 选择器的功能,允许你根据 CSS 属性来选择所需的元素。
page.select('#form input[type=text]').each do |element|
element.hide
end
这个代码会隐藏全部父元素的 id 属性是 form 并且 type 值是 text 的 input 元素,
属性选择器支持 =, ~=, |=, existence 和 != 你可以使用属性选择器的同时使用这些,例如 input[class=link][href="#"]。可惜 IE 不支持这些选择器。
在 Rails 中使用 Ajax
如果页面中不使用 Ajax 的话 RJS 不是很有用处。Rails 根据不同的环境提供了许多方法来实现 Ajax。可以看看 Ruby on Rails 文档中关于这些方法的详细说明。
link_to_remote(name, options = {}, html_options = {})
在 Rails 中这是生成 Ajax 的最常用的办法。当点击 link_to_remote() 生成的超链接的时候产生一个 Ajax 请求。当 <a> 的 onclick() 事件发生时, Rails 产生一个 Ajax.Request 或 Ajax.Updater,依靠传递给 link_to_remote() 的 :update 参数。在 RJS 中,:update 选项不会产生 Prototype Ajax.Updater 对象。如果页面中的 RJS 返回的结果出现问题,可以看看是否在 RJS 模板中错误的使用了 :update 选项。
link_to_function(name, function, html_options = {})
当点击超链接的时候执行 JavaScript 函数或代码。这实际上不会创建 Ajax 请求,但是它可以执行自己编写的 JavaScript 函数。使用这个方法来执行自己编写的 JavaScript 库,在其中利用 Ajax.Request 来构造 Ajax 调用。
remote_function(options)
产生 JavaScript 在后台生成一个 Ajax 请求访问控制器的 action。这个方法用在操作 DOM 对象事件的时候发起 Ajax 调用是非常有用,例如 <select> 标签的 onchange() 动作。接受和 link_to_remote() 方法一样的参数。
observe_form(form_id, options = {})
工作原理和 observe_field() 一样,但是侦测整个表单。
form_remote_tag(options = {})
创建一个表单,在背后使用 Ajax 请求来提交其中的内容。这是另一个非常有用的生成 Ajax 请求的方法。
form_remote_for(object_name, object, options = {}, &proc)
和 form_remote_tag() 一样,Rails 1.1 提出使 form_for 更符合语义。
submit_to_remote(name, value, options = {})
创建一个 button 来提交父表单中的内容到一个远程的控制器 action。接受的参数和 form_remote_tag() 一样。
in_place_editor_field(object, method, tag_options = {}, in_place_editor_options = {})
当修改输入框的字段时候,产生一个 Ajax 请求。在 RJS 中使用这个方法需要给 the in_place_editor_options 传递一个 hash 其中指定 :script => true。
in_place_editor(field_id, options = {})
这个方法限制于 in_place_editor_field()。在 RJS 中使用这个方法需要给 options 传递的 hash 参数有 :script => true。
drop_receiving_element(element_id, options = {})
当删除一个元素的时候产生一个 Ajax 请求。
sortable_element(element_id, options = {})
当元素使用拖放功能的时候随时产生 Ajax 请求。
Ajax.Request(url, options)
所有的 Rails 辅助方法都使用这个 Prototype 对象来生成真实的 Ajax 请求。你也可以在你的 JavaScript 中使用这个对象发起 Ajax 请求。这个 JavaScript 对象不是 Ruby 对象。
辅助方法
Rails 辅助方法让 RJS 模板可以在一个方法中操作多个。不同于传统的辅助方法,RJS 辅助方法必须传递给一个 page 对象。
def insert_item(list_id, item)
page.insert_html :bottom, list_id, '<li>#{item.title}</li>'
page.visual_effect :highlight, 'item_#{item.id}', :duration => 0.5
end
现在,不必在每个模板中总是使用 insert_html() 和 visual_effect(),我们可以使用 insert_item() 方法,它能帮助我们写出更简单易读的模板。这个新的辅助方法可以在如下的 RJS template 调用, @item 是一个传递给 RJS 模板的实例变量,我们希望把每一个 item 追加到 my_list 列表中:
page.insert_item 'my_list', @item
分享到:
相关推荐
以下是对Ajax常用技术的详细说明: 1. **XMLHttpRequest对象**:Ajax的核心是XMLHttpRequest(XHR)对象,它是JavaScript内置的对象,负责与服务器进行异步通信。通过创建XMLHttpRequest实例,可以发送HTTP请求到...
**Ajax 常用框架集** Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。它通过在后台与服务器进行少量数据交换,使网页实现异步更新。Ajax框架的出现,使得...
本篇将详细探讨Ajax常用框架的API及其应用。** 1. **jQuery AJAX** jQuery是最流行的JavaScript库之一,其内置的$.ajax()函数是实现Ajax请求的主要方式。$.ajax()接受一个包含各种选项的对象参数,如URL、类型...
### Ajax常用方法详解 #### 一、概述 Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步...
jQuery 中 AJAX 常用的方法总结 jQuery 是一个功能强大且流行的 JavaScript 库,它提供了许多有用的方法来处理 AJAX 请求。AJAX(Asynchronous JavaScript and XML)是一种创建交互式网页的技术,它允许网页从...
而"ajax常用等待图片"则是在进行Ajax请求时显示的一种视觉提示,让用户知道后台正在处理数据或加载内容。 当用户触发一个Ajax请求时,由于网络延迟或者服务器处理时间,用户可能需要等待一段时间才能看到结果。这...
本资源主要探讨了Ajax常用的设计模式及其实际应用场景,这对于提升Web应用的用户体验和性能至关重要。 首先,我们来了解一下Ajax的核心组成部分: 1. JavaScript:它是实现Ajax交互的关键,通过创建XMLHttpRequest...
【Ajax常用实例代码】主要涵盖了Web开发中的几个关键应用场景,包括用户登录注册注销、数据库交互、跨页面数据传递、文本片段展示以及获取服务器信息。这些功能在构建动态、交互性强的Web应用时非常常见,而Ajax技术...
在本篇文章中,我们将深入探讨一些常用的AJAX函数,以帮助开发者更有效地实现动态网页交互。 首先,创建XMLHttpRequest对象是AJAX的基础。XMLHttpRequest对象是JavaScript中用于实现异步通信的核心对象。以下是一个...
这里提到的"juery+ajax常用js文件"包含了一系列与这两个技术相关的库和插件,用于实现更复杂的文件上传功能。让我们一一探讨这些文件的作用和相关知识点。 1. **jQuery**: `jquery-1.4.min.js` 是一个早期版本的...
这个“ajax 常用图标文件”压缩包可能包含了一系列与Ajax操作相关的图形图标,如加载、刷新、成功、错误等状态的图标,用于提升用户体验,使用户更加直观地了解后台处理的状态。 1. **Ajax技术原理**:Ajax的核心是...
本文将通过分析提供的"Ajax常用学习案例"来深入探讨Ajax的关键知识点。 一、Ajax基础概念 1. XMLHttpRequest对象:Ajax的核心是XMLHttpRequest对象,它允许JavaScript在后台与服务器交换数据并更新部分网页内容。...
ajax常用框架api文档.rar ajax常用框架api文档.rar
标题"Ajax常用图象"指出,这些文件可能是一些在Ajax交互过程中常用的图形元素,它们通常被用于表示Ajax操作的状态或者进度。以下是对这些文件名的解读: 1. spinning_wheel_throbber.gif:这是一个旋转的轮盘图,常...
AJAX(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。它通过在后台与服务器交换数据并更新部分网页内容,实现了页面的异步交互,提高了用户体验。在ASP.NET中,...