RJS 模板的另种用法
RJS 模板会膨胀的,但在你应用程序的其它部分使用这些方法却很好。是否可以在你的 ptototype 回调或静态 javascipt 文件内使用奇妙的 javascript 辅助方法呢?
下面是个例子:
<%= link_to_function('reorder', update_page do |page|
page.send :record, sortable_element('items',
:url => viewbox_url(:action => 'reorder',
:id => @view.id)).match(/Sortable.create[^n]+/)
page.hide 'contents_controls'
page.show 'contents_reorderable'
end) %>
如果你深入探究 RJS 模板是如何工作的,它基本上执行的代码在一个 update_page 块内。在 #link_to_function 内我所要做的是在 link 的 onclick 事件内输出结果。然而,若你希望 HTML 整洁些的话。我们可以把它放在一个 javascript 库内。
创建控制器:
我们希望 URL 看起来与任何旧的 javascript 如 ‘javascripts/foo.js’ 类似。
# generate the controller first
# ./script/generate controller javascripts
# create a route
map.connect 'javascripts/:js', :controller => 'javascripts', :action => 'show',
:requirements => { :js => /.js$/ }
# the controller action
def show
headers["Content-Type"] = 'text/javascript'
render :action => params[:js][0..-4]
end
# the rhtml view
function reorder() {
<%= sortable_element('items', :url =>
viewbox_url(:action => 'reorder', :id => @view.id)).match(/Sortable.create[^n]+/) %>
<% update_page do |page|
page.hide 'contents_controls'
page.show 'contents_reorderable'
end -%>
}
还有什么?
你可以打开页面缓存以便不用每次都渲染 javascript 视图。这就是为什么用 .js 扩展名定义路由是必须的。如果对你当前静态内容缓存 js 文件有问题的话,可以给你的 javascript 控制器一个不同的路径。
现在你有了这个 javascript 控制器,你可以使用它来加强其它的 javascript 函数,如 AJAX 调用。特别是如果你喜欢使用 Behavior 库来添加回调,这会让你感到相当方便。
http://habtm.com/articles/2005/12/15/another-use-for-rjs-templates
http://my4java.itpub.net/post/9983/215442
RJS 模板的另种用法相关推荐
- layui 表格内容写temple函数_layui表格-template模板的三种用法
问题情境: layui中将数据库数据通过layui table渲染到前端表格,非常简单,但是如果数据库存储的信息不能被直接展示,项目中该页面有好几个这样的字段,会员类型,支付类型,会员时长还有平台类型 ...
- layui导入模板数据_layui表格-template模板的三种用法
问题情境: layui中将数据库数据通过layui table渲染到前端表格,非常简单,但是如果数据库存储的信息不能被直接展示,项目中该页面有好几个这样的字段,会员类型,支付类型,会员时长还有平台类型 ...
- Java Arrays.sort()的几种用法
Java的Arrays类中有一个sort()方法,该方法是Arrays类的静态方法,在需要对数组进行排序时,非常的好用. 但是sort()的参数有好几种,下面我就为大家一一介绍,这几种形式的用法. = ...
- c++ operator操作符的两种用法:重载和隐式类型转换,string转其他基本数据类型的简洁实现string_cast...
C++中的operator主要有两个作用,一是操作符的重载,一是自定义对象类型的隐式转换.对于操作符的重载,许多人都不陌生,但是估计不少人都不太熟悉operator的第二种用法,即自定义对象类型的隐式 ...
- Rails 中的 RJS 模板
Rails 自从 1.1版开始引入了 rjs 模板,目的是为了解决渲染一个模板执行多个 JavaScript 代码块的问题.rjs 模板基于 prototype 的 ajax 类,渲染一个 rjs 模 ...
- 入门微信小程序开发(三)数据绑定的几种用法
一.数据绑定 与书写HTML页面一样,小程序页面也只能通过多写多练提升.在构建完页面后就出现了一个问题,我们该如何获取组件元素让数据与之关联呢? 在网页开发中,我们同样使用JS操作DOM,包括数据渲染 ...
- Chatgpt提升工作效率的7种用法
Chatgpt在人工智能领域越来越受到重视.以前我们只能通过专业的工具来完成各种任务,但现在我们可以通过Chatgpt来解决一些日常任务,提高工作效率.下面是Chatgpt如何提升工作效率的7种用法. ...
- vue3.0中setup使用(两种用法)
这篇文章主要介绍了vue3.0中setup使用,本文通过两种用法给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 一.setup函数的特性以及作用 可以确定的是 V ...
- 模板编程中typename用法
模板编程中typename用法 文章目录 模板编程中typename用法 typename的常规用法 typename的第二个用法:修饰类型 typename使用规则 typename的常规用法 ty ...
最新文章
- android 对比win10 耗电,win10系统下像何查看耗电的应用程序
- 034_jQuery Ajax的getJSON和getScript方法
- Hystrix默认超时时间
- cefSharp通过js操控页面,含跨域操控
- s5-13 RIP 为什么会 衰败
- 标准库类型string的基本功能和使用
- IDEA如何生成get和set方法
- c语言编写程序求8,使用c语言编写程式,实现计算1*2*3+4*5*6+7*8*9+……+28*29*30的值...
- Spring官方RSocket Broker 0.3.0发布: 快速构建你的RSocket架构
- numpy 中shape的用法
- android imei *#06#,[Android]Hot key IMEI *#06# and *#07#
- php调用pdf虚拟打印机,电脑中怎么安装pdf虚拟打印机
- 测井曲线fft matlab,Matlab编程实现FFT实践及频谱分析
- Cloudera:开放式数据湖仓,释放数据分析潜力
- python画蛋糕_用python代码绘制漂亮生日蛋糕
- 【天光学术】西方哲学论文:中西方哲学中的虚无主义成分对比
- Java亿级流量架构之网关设计思路
- 基于PHP和MySql的学生成绩管理系统(附完整版代码)
- 55个美丽而独特的网站页眉设计欣赏
- 流行病学名词解释和简答题集锦
热门文章
- STL源码分析之RB-tree关联容器 上
- SPARK-SQL - group分组聚合api,agg()
- html5微信视频无法播放视频教程,解决微信h5页面视频播放问题实例
- 计算机考试贷款日到期日,怎么样用金融计算器算利率和期限
- 【owt-server】m88分支和m59-server
- 2022世界人工智能大会全记录
- 在oracle 中编写一个程序,用VC 开 发 基 于ORACLE 数 据 库 应 用 程 序 的 两 种 方 法...
- 快过年了,Python实现12306查票以及自动购票....
- java file delete 不及时_java中File的delete()方法刪除文件失敗的原因
- win7/win10下KiWi Syslog服务器的安装与配置