Rails 中的 RJS 模板
Rails 自从 1.1版开始引入了 rjs 模板,目的是为了解决渲染一个模板执行多个 JavaScript 代码块的问题。rjs 模板基于 prototype 的 ajax 类,渲染一个 rjs 模板的同时,会将 response 的 content-type 设置为 text/javascript,如果该 request 是有 Ajax.Request 或者 Ajax.Updater 发出的,并且 evalScripts 设置为 true,那么如果返回的报文头将会使返回的 JavaScript 自动被执行。
利用这个特性,可以做到一个调用更新多个 html 元素的目的(Update Multiple Elements by One Request)。比如以下 rjs 模板:
page.update_html 'container', :partial => 'partial_page'
page.visual_effect :highlight, 'container'
page.alert 'Updated Successfully'
将会更新 container 元素的内容,然后有一个 highlight 的效果,最后弹出一个 Updated Successfully 的对话框。
再联系到 inu.cc 的现有框架,过渡依赖于局部渲染。全局传参的架构确实很保险,但是过于臃肿,现在回想起来甚至有点违背了 rails 本身倡导的 agile 的思想。既然有现成的、符合使用惯例的实现方式,为何要自己另外建立一套框架?这点确实是设计初期没有考虑到的。结果导致了当前架构的不易维护。
吃一堑长一智,在此记录下以前忽略的几种模式:惯例优先、默然渲染、rjs、rxml,以及提供各种常用服务的开发包。希望这些记录能够使 inu.cc 的下一个版本更加快速、敏捷、易维护,同时能带来更好的用户体验。
RJS API: RJS Api on http://api.rubyonrails.org
Rails 中的 RJS 模板相关推荐
- rails中使用rjs
先来一段rjs的说明: 它是一个文件,保存在app/views 目录下,扩展名为.rjs ,其中包含的命令可以生成JavaScript代码,并交给浏览器去执行. 模板本身的用法和.html.erb 模 ...
- rails中对应关系
2019独角兽企业重金招聘Python工程师标准>>> 1,建立文章对应的评论表,一对多的关系 rails generate model Comment comment:string ...
- Rails中的使用者验证:Devise
Rails中的使用者验证:Devise 概要:Devise是Ruby On Rails的一个三方权限认证组件,通过它可以无需编码快速生成一个带有登陆,注册.权限认证和重置密码的认证模块. 安装: 1. ...
- rails 中的respond_to 对不同的文件要求给予相应
通过上一讲,我们已经对REST on Rails的基本框架有所了解,但是它是如何实现根据客户端的请求类型来返回不同类型的资源表示的呢?这就是我们这一讲所要讲的,秘密就在于respond_to. 首先让 ...
- freemarker中运算符_如何在Web应用系统表示层开发中应用Velocity模板技术
软件项目实训及课程设计指导--如何在Web应用系统表示层开发实现中应用Velocity模板技术 1.分离Web表示层的数据处理和展现逻辑的常见的应用技术 分离Web表示层的数据处理和展现逻辑是目前企业 ...
- 在Rails中撤消脚手架
有没有办法在Rails中"撤消"脚手架命令的效果? #1楼 第一次,如果您已生成脚手架,则可以检查数据库迁移. 你必须销毁它们来清理你的数据库 rake db:rollback 然 ...
- SpringBoot 项目中使用velocity模板(转载)
(不要使用这种模板了,spring boot最新版已经不支持了.使用FreeMarker吧:http://blog.csdn.net/clementad/article/details/5194262 ...
- C++中的类模板详细讲述
一.类模板定义及实例化 1. 定义一个类模板: 1 template<class 模板参数表> 2 3 class 类名{ 4 5 // 类定义...... 6 7 }: 其中,templ ...
- polymer 绑定html元素,使用在Polymer元素内的light dom中定义的模板
我正在尝试将模板从DOM移动到元素内部. 这是我的要素: BOOM Polymer('bt-sortable-list', { ready: function() { var div = docume ...
最新文章
- (C++)1031 查验身份证 3难点+3注意点
- linux命令积累!
- 区块链BaaS云服务(30) 字节方舟 ByteArk
- javascript按字节截取标题中字符串
- Linux用户和组管理,查看软件缓存,通过命令查看硬件信息(cpu,版本,序列号,内存,主板,内核等)
- WireShark抓浏览器的https包
- 从研究到应用:腾讯AI Lab的自然语言理解和生成
- [实验手册]MPLS/×××分解:防止PE-CE的路由环路
- 在C#中实现托盘是多么简单
- synchronized 王的后宫总管,线程是王妃
- 用Asp.net写自己的服务框架
- Luogu 3625 [APIO2009]采油区域
- 【总结整理】写给非技术产品经理的技术能力要求----摘自《人人都是产品经理》...
- vSphere 6.7的新增功能?我应该升级吗?
- 那些月入1万的自媒体大咖,惯用的4个爆款选题分享给你
- linux ftp mysql_linux搭建ftp服务——未连接mysql数据库的做法
- 深度学习实践指南(三)—— 参数(超参)及数据集的处理
- gulp-htmlmin 页面压缩插件 gulp插件 参数说明
- XML中写注释的格式
- slic codec
热门文章
- 搭建kubernetes集群管理平台
- 修改hosts不管用。为什么修改127.0.0.1指向的域名,访问域名却弹出别的网站
- C++ rb_tree红黑树
- 安装ubuntu20.4桌面系统
- 美通企业日报 | 特步签约林书豪进军篮球领域;中兴和中国移动直播中国首个5G运动会...
- SpringBoot中的Banner(Banner)
- 如何查询设备序列号?其实一条命令搞定!
- javaSE基础重点知识点总结 持续更新
- 带有CAN模块通讯的labview转化为应用程序(exe)CAN模块启动失败问题解决办法
- gif动图可以压缩大小吗?gif图片怎么压缩?