RoR unobtrusive scripting adapter--UJS(一些Javascript的语法糖)
rails/actionview/app/assets/javascripts/..
视频:https://gorails.com/episodes/rails-ujs-primer?autoplay=1
介绍
This unobtrusive scripting support file 脚本支持Rails,但不严格绑定在任何backend,也可以用在其他任何应用.
- force confirmation dialogs for various actions;
- make non-GET requests from hyperlinks;从超级链接制作非get请求
- make forms or hyperlinks submit data asynchronously with Ajax;用Ajax制作表格或链接提交异步数据
- 当已经点击提交按钮时,自动防止多次点击,导致重复提交。
These features are achieved by adding certain data attributes to your HTML markup.
这些功能是通过增加了data attributes到Http markup来实现的。
⚠️抛弃了jquery,使用coffeescript编译的。新要点:
- You won't get jQuery anymore in your Rails 5.1 applications
- Rails is starting to push you towards building your forms that all submit with AJAX requests
data = new FormData()
使用
rails app 直接在application.js中加上//= reqquire rails-ujs。
如果使用gem Webpacker或者其他的JS bundler,在主要main JS file增加以下代码:
import Rails from 'rails-ujs';
Rails.start()
定义了一些方便的语法糖,比如:
Rails.disableElement(document.getElementById("form_submit"))
解释:让link, button, form, formSubmit元素不能使用。还有enableElement(),让元素可以使用。
在rails/actionview/app/assets/javascripts/rails-ujs/features/disable.coffee文件中定义的。
remote.coffe文件有处理ajax 请求的完美案例格式:⚠️这个格式是coffee格式。
Rails.ajax(
type: method or 'GET'
    url: url
    data: data
    dataType: dataType
# stopping the "ajax:beforeSend" event will cancel the ajax request
# 不能用beforeSend:干别的事情,否则会停止ajax:beforeSend!!
    beforeSend: (xhr, options) ->
        if fire(element, 'ajax:beforeSend', [xhr, options])
            fire(element, 'ajax:send', [xhr])
        else
            fire(element, 'ajax:stopped')
          return false
# success, complete都可以使用。
    success: (args...) -> fire(element, 'ajax:success', args)
    error: (args...) -> fire(element, 'ajax:error', args)
    complete: (args...) -> fire(element, 'ajax:complete', args)
    crossDomain: isCrossDomain(url)
    withCredentials: withCredentials? and withCredentials isnt 'false'
)
案例:视频5.40分,我也实操成功了✌️
我写了一个只有一个输入框的表格,在chrome-inspect-console上声明一个form格式:
var data = new FormData()
data.append("post[content]", "输入的value")
#post[content]是输入框的name, 具体可见webAPI, 用于附加一个新的value到一个已存在的 key
然后使用:
Rails.ajax({url: '/posts', type:"POST", data: data})
就正确提交了数据✌️,相当于submit。
解释:FormData()会创建空的表格对象。之后使用append("key", "value")附加给这个对象。
Rails.serializeElement()是一个UJS脚本方法。等同于使用传统的FormData(this)
data1 = new FormData(某个表格), data1获得表格内已有的所有数据对儿。
Csrf.coffee文件
Rails.csrfToken()
"SGFmdd/odcWc625LdYvcwUgi3jt+ou2H7FnKtH448qEksRvE0SHRESMuWS11wNaIrXicnnibw2VDaSeHIJt/tw=="
用于生成随机token。用于api
form.coffee文件
Rails.serializeElement()方法,一次性得到当前表格中已经输入的所有信息。
> var data1 = Rails.serializeElement(document.getElementsByTagName("form")[0])
undefined
> data1
"utf8=%E2%9C%93&authenticity_token=LSfv%2F12dCBYWSg%2FSgNCGQ5n4oV9h1wNBQD4YxqkgAPxB95JOU1SswqmPOLSAm4wKfKLj%2BmfuLaPvDvX194ON6g%3D%3D&post%5Bcontent%5D=xzczxxcz"
> Rails.ajax({url: '/posts', type:"POST", data: data1})
undefined
数据被存入。
RoR unobtrusive scripting adapter--UJS(一些Javascript的语法糖)的更多相关文章
- JavaScript calss语法糖
		JavaScript calss语法糖 基础知识 严格意义上来讲,在Js中是没有类这一概念的. 我们可以运用前面章节提到的构造函数来模拟出类这一概念,并且可以通过原型对象的继承来完美的实现实例对象方法 ... 
- JavaScript中if语句优化和部分语法糖小技巧推荐
		前言 在前端日常开发过程中,if else判断语句使用的次数应该是比较频繁的了,一些较为复杂的场景,可能会用到很多判断,在某个代码块使用很多if else时,代码会显得较为冗余,阅读起来不够清晰. 除 ... 
- JavaScript基本语法(一)
		前段时间学习了HTML和CSS,也实战了一些结构较简单的项目.在还没运用到JS的知识时,做出来的效果总觉得少了些什么.虽然总体布局与一些基本的特效,也能用HTML+CSS就能完成.但如今开始进入Jav ... 
- javascript运算符语法概述
		× 目录 [1]个数 [2]优先级 [3]结合性[4]类型[5]规则表 前面的话 javascript中的运算符大多由标点符号表示,少数由关键字表示,它们的语法言简意赅,它们的数量却着实不少.运算符始 ... 
- javascript基础语法——表达式
		× 目录 [1]原始表达式 [2]复杂表达式 前面的话 一般地,关于javascript基础语法,人们听得比较多的术语是操作符和语句.但是,其实还有一个术语经常使用,却很少被提到,这就是javascr ... 
- javascript基础语法——词法结构
		× 目录 [1]java [2]定义 [3]大小写[4]保留字[5]注释[6]空白[7]分号 前面的话 javascript是一门简单的语言,也是一门复杂的语言.说它简单,是因为学会使用它只需片刻功夫 ... 
- JavaScript的语法规则
		JavaScript的语法规则 JavaScript区分大小写 JavaScript脚本程序须嵌入在HTML文件中 JavaScript脚本程序中不能包含HTML标记代码 每行写一条脚本语句 语句末尾 ... 
- JavaScript的语法要点 1 - Lexically Scoped Language
		作为从一开始接触C.C++.C#的程序员而言,JavaScript的语法对我来说有些古怪,通过最近一年的接触,对它有了一定的了解,于是想把它的一些语法要点记录下来. 1. Block Scope vs ... 
- javascript的语法作用域你真的懂了吗
		原文:javascript的语法作用域你真的懂了吗 有段时间没有更新了,思绪一下子有点转不过来.正应了一句古话“一天不读书,无人看得出:一周不读书,开始会爆粗:一月不读书,智商输给猪.”.再加上周五晚 ... 
随机推荐
- 170531、FormData 对象的使用
			通过FormData对象可以组装一组用 XMLHttpRequest发送请求的键/值对.它可以更灵活方便的发送表单数据,因为可以独立于表单使用.如果你把表单的编码类型设置为multipart/form ... 
- LOL TGP更新影响VS debug 问题
			刚才看群里说到VS无法调试,出现"无法使用xxx附加到应用程序'webdev.webserver...'"的问题,群友提出自己的经历,可能是LOL TGP的问题. 提问者卸载了TG ... 
- Oracle数据类型char与varchar的对比
			使用scott用户连接数据库 新建一个表 create table stu01(name char(32)); 插入一条数据 insert into stu01 values('liuyueming' ... 
- uboot ping doesn’t work
			Ping doesn't work Ping from U-Boot to a host should work. Ping from a host to U-Boot should not. U-B ... 
- # 释放内存                 filter_res_q_l = filter_res_q_l[-2048:]                 filter_res_a_l = filter_res_a_l[-2048:]
			# 释放内存filter_res_q_l = filter_res_q_l[-2048:]filter_res_a_l = filter_res_a_l[-2048:] 
- kubernetes实战(三):k8s v1.11.1 持久化EFK安装
			1.镜像下载 所有节点下载镜像 docker pull kibana: docker tag kibana: docker.elastic.co/kibana/kibana: docker pull ... 
- thinkphp处理jQuery EasyUI form表单问题
			jQuery EasyUI form表单不是ajax方式提交,而是在提交的时候新建一个隐藏的iframe并在iframe里面创建一个与绑定表单一样的表单,然后在iframe里面进行同步提交而不是异步提 ... 
- 百度天气接口api
			百度天气接口 以GET形式提交,返回JSON或XML URL:http://api.map.baidu.com/telematics/v3/weather?location={城市名}&out ... 
- Django Rest Framework(3)-----APIView与Viewsets
			REST framework提供了一个APIView类,它是Django的View类的子类. REST framework主要的几种view以及他们之间的关系: mixins 到目前为止,我们使用的创 ... 
- testng日志和报告
			TestNG是通过 Listeners 或者 Reporters 生成测试报告. Listeners,即 org.testng.ITestListener 的实现,能够在测试执行过程中发出各种测试结果 ... 
