Rails Javascript

anime-talk:Rails + JavaScript项目-阶段4 动漫谈话 Rails + JavaScript项目-阶段4 立即下载

Ajax介绍

为了理解Ajax, 你首先必须理解web浏览器是如何工作的

当你在你的浏览器地址中输入http://localhost:3000并按下enter时,浏览器作为客户端会给服务器端发一个请求,然后浏览器会解析response,搜集所有相关的assets,例如javascript文件、表格和图片。然后它会组合界面。当你点击一个link时,浏览器会重复上面的流程:获取page,获取assets,然后组合在一起,给你展示结果。这称为“request response cycle”。

 javascript也可以给server发送请求,然后解析response。javascirpt还可以更新page上的内容。整合这两个功能,我们可以使用javascript来更新web page的部分内容,而不需要从server获取全部的内容,我们称这个技术为ajax。

下面是一个是我们使用javascript来发送ajax请求的例子:

fetch("/test")
  .then((data) => data.text())
  .then((html) => {
    const results = document.querySelector("#results");
    results.insertAdjacentHTML("beforeend", data);
  });

这个代码从"/test"获取数据,然后将结果results添加到一个id为results的element之后。

Rails提供了很多内容的功能去构建web pages。通常我们不需要自己这样写代码。本文将介绍Rails如何帮助我们写这样的website。

javascript脚本

Rails使用"Unobtrusive JavaScript"技术去给dom添加javascript。如:

<a href="#" onclick="this.style.backgroundColor='#990000';event.preventDefault();">Paint it red</a>

我们可以看到,这有点类似于inline javascript

当我们点击,这个背景将变为红色。当我们希望click触发很多类似操作时,我们则需要将onclick的handler的函数定义真正的转化为一个函数,如下:

window.paintIt = function(event, backgroundColor, textColor) {
  event.preventDefault();
  event.target.style.backgroundColor = backgroundColor;
  if (textColor) {
    event.target.style.color = textColor;
  }
}

然后在我们的界面,可以如下使用:

<a href="#" onclick="paintIt(event, '#990000')">Paint it red</a>

而当我们需要重复许多类似的操作时,如下:

<a href="#" onclick="paintIt(event, '#990000')">Paint it red</a>
<a href="#" onclick="paintIt(event, '#009900', '#FFFFFF')">Paint it green</a>
<a href="#" onclick="paintIt(event, '#000099', '#FFFFFF')">Paint it blue</a>

则我们可以使用events来进行优化。我们可以给我们的link增加‘data-*’属性,然后给每一个拥有这个属性的link绑定click event的handler。如下:

function paintIt(element, backgroundColor, textColor) {
  element.style.backgroundColor = backgroundColor;
  if (textColor) {
    element.style.color = textColor;
  }
}

window.addEventListener("load", () => {
  const links = document.querySelectorAll(
    "a[data-background-color]"
  );
  links.forEach((element) => {
    element.addEventListener("click", (event) => {
      event.preventDefault();

      const {backgroundColor, textColor} = element.dataset;
      paintIt(element, backgroundColor, textColor);
    });
  });
});

则我们就可以进行如下操作:

<a href="#" data-background-color="#990000">Paint it red</a>
<a href="#" data-background-color="#009900" data-text-color="#FFFFFF">Paint it green</a>
<a href="#" data-background-color="#000099" data-text-color="#FFFFFF">Paint it blue</a>

我们管它叫'unobtrusive' JavaScript是因为我们从此不再需要将javascript和html混合在一起。这样做的好处是:我们很好的维护我们的脚本。我们可以很方面的给link添加data的属性并添加相应的行为。

内置的helpers

远端的元素

Rails提供了一系列的view helper方法帮我们生成html。因此,'unobtrusive' JavaScript分为:javascirpt half 和ruby half。

我们主要讲解rails javascript half。

form_with

form_with是帮助我们生成forms的helper。为了使用ajax,我们需要设置local=false。如下:

<%= form_with(model: @article, id: "new-article", local: false) do |form| %>
  ...
<% end %>

则会生成如下html,

<form id="new-article" action="/articles" accept-charset="UTF-8" method="post" data-remote="true">
  ...
</form>

当data-remote="true"时,这个form会异步提交。我们可以绑定ajax:success/ajax:error给这个event。如下:

window.addEventListener("load", () => {
  const element = document.querySelector("#new-article");
  element.addEventListener("ajax:success", (event) => {
    const [_data, _status, xhr] = event.detail;
    element.insertAdjacentHTML("beforeend", xhr.responseText);
  });
  element.addEventListener("ajax:error", () => {
    element.insertAdjacentHTML("beforeend", "<p>ERROR</p>");
  });
});

link_to是帮助我们生成links的helper。其也有:remote选项,我们可以如下使用:link_to

<%= link_to "an article", @article, remote: true %>

生成为:

<a href="/articles/1" data-remote="true">an article</a>

我们可以绑定向form_with一样的异步操作。我们假设我们有一长串的文件,通过一个link就可以全部删除。我们可以生成如下html。

<%= link_to "Delete article", @article, remote: true, method: :delete %>

然后如下写javascript

window.addEventListener("load", () => {
  const links = document.querySelectorAll("a[data-remote]");
  links.forEach((element) => {
    element.addEventListener("ajax:success", () => {
      alert("The article was deleted.");
    });
  });
});

itemizer:具有AJAX文件上传功能的Rails + AngularJS脚手架应用程序 条目器 AngularJS的Rails脚手架示例 安装 耙数据库:创建 耙数据库:迁移 耙db:种子 耙式凉亭:安装 滑轨 打开浏览器并享受;) 测验 规格 必须使用一个Item模型来实现一个项目,该模型具有2个字段:名称和图片(图片文件)。 所有操作应在一页上进行,而无需重新加载该页。 该页面最初显示所有项目(项目)的列表,并具有更改或删除(带有确认)每个项目的功能。 在页面顶部,还有一个用于添加新元素的表单,该表单由一个文本字段(名称)和一个文件输入(图片)组成。 当您单击“保存”按钮时,页面不会重新加载,并且新元素立即出现在列表中,并且表单字段也被清除。 单击每个元素(以及新创建的元素)的编辑按钮时,将在该元素下打开一个编辑表单,与创建时相同。 如果用户未更改图片并提交表单,则图片不会更改。 如果未指定名称,则需要在名称字段中添加验证,并在提交表单时显示错误。 立即下载

相关推荐

select2-rails:将Select2 javascript库与Rails资产管道集成

Select2用于Rails资产管道 是基于jQuery的选择框的替代品。 它支持搜索,远程数据集和结果的无限滚动。 select2-rails gem将Select2 jQuery插件与Rails资产管道集成在一起。 用法 安装select2-rails gem 将select2-rails添加到您的Gemfile并运行bundle install : gem "select2-rails" 包括select2-rails JavaScript资源 将以下内容添加到您的app/assets/javascripts/application.js : //= require select2 要添加select2-full.js而不是select2.js ,请添加以下内容: //= require select2-full 包括select2-rails样式表资产 添加到您的app/

如何在rails 6中使用js

文章目录NPMYarnES6BabelWebpackWebpackerSprockets 4不要以使用Sprockets的方式使用Webpacker更多细节参考[原文链接](https://dev.to/morinoko/adding-custom-javascript-in-rails-6-1ke6) 在这篇文章中我们会介绍Webpacker、Yarn和Sprockets . 和以往的版本不同...

include_heqile的博客 1705

自抗扰控制(ADRC)原理与MATLAB实现详解

自抗扰控制(ADRC)是一种先进的鲁棒控制策略,其核心在于通过扩张状态观测器(ESO)实时估计并补偿系统总扰动。相比传统PID控制,ADRC不依赖精确数学模型,特别适合处理非线性、时变系统。从控制原理看,ADRC将系统内部动态和外部扰动统一建模,通过带宽参数化方法实现快速响应与强抗扰能力。在工程实践中,ADRC已成功应用于无人机飞控、伺服系统等场景,MATLAB仿真显示其上升时间可比PID提升46%,抗扰动恢复时间缩短60%。典型实现包含ESO设计、扰动补偿和PD控制三部分,参数整定遵循ω₀=3~5倍系统带

weixin_33585822的博客 95

在 Rails 中使用 JavaScript

在 Rails 中使用 JavaScript 本文介绍 Rails 内建对 Ajax 和 JavaScript 等的支持,使用这些功能可以轻易的开发强大的 Ajax 程序。 读完本文,你将学到: Ajax 基本知识; 剥离式 JavaScript; 如何使用 Rails 内建的帮助方法; 如何在服务器端处理 Ajax; Turbolinks 简介; Chap

TRAMP~ 1313

STM32F103到F407移植OLED,为啥F4屏幕不亮?一个延时函数搞定时序问题

本文详细分析了STM32F103到F407移植OLED时屏幕不亮的问题,指出时钟频率差异导致的时序问题是关键原因。通过对比F103和F407的时钟架构差异,提供了精确延时函数的实现方法,并指导在I2C通信关键点插入适当延时,确保OLED正常显示。文章还涵盖了完整的测试方案和高级优化技巧,帮助开发者彻底解决移植中的时序问题。

weixin_30642561的博客 549

上机任务一:空气质量指数 (air quality index,AQI是定量描述空气质量状况的指数。为了更好地了解和人们身体健康息息相关的天气状况,本书模拟生成500条某地区天气数据,一行样本对应一天

调整后的R平方为0.4308,考虑了模型中的自由度,它略低于多重R平方,说明模型的解释能力可能有限。总的来说,新的模型相对于之前的模型在AIC值上更优,包含了最高温度(X2)和最低温度(X3)这两个重要的预测因子,并且对AQI的解释能力较好。在表中,Df表示自由度,Sum Sq表示总平方和,Mean Sq表示均方(总平方和除以自由度),F value表示F统计量,Pr(>F)表示对应的p值。在分析这些结果时,需要关注系数的显著性(p值),系数的方向(正向或负向影响),以及系数的大小(估计值)。

Mrrunsen的博客 723

rails程序中加载js

常用的方式有两种: 1. 直接在view中写javascript代码; 2. 通过Asset Pipeline加载app/assets/javascripts中的js文件 对于第一种方式,我的习惯做法是在app/views/layout/application.html.erb中定义名称为javascript的yield,然后在需要js的view中使用content_for插入js代码:

江城守望者 2337

新能源汽车电池及充电原理详解

本文详细介绍了新能源汽车的电池包结构、铅酸电池充放电原理,以及交流和直流充电的工作原理和优缺点。内容涵盖电池串联并联原因、充电设备如车载充电机、交流充电桩和直流充电桩的介绍,以及不同充电模式的连接方式。通过对充电过程的深入探讨,有助于读者理解新能源汽车的充电技术。

让你爱上电路设计 4528

如何快速掌握memtest_vulkan:专业GPU显存检测完整指南

memtest_vulkan是一款基于Vulkan计算API的跨平台GPU显存检测工具,专为硬件爱好者、超频玩家和普通用户设计,提供精准的显存稳定性测试。通过专业的显存检测技术,帮助你快速排查显卡故障,确保GPU始终处于最佳工作状态。 ## 🚀 项目价值与核心优势 ### 为什么选择memtest_vulkan? memtest_vulkan采用先进的Vulkan计算着色器技术,直接与GP

gitblog_00071的博客 601

【Jenkins】Jenkins :首次登录直接使用 admin 账户

目录 一、使用admin账户 二、修改admin用户密码 三、管理视图 一、使用admin账户 安装时,自定义安装,选择必要的插件安装,设置Jenkins的URL为: http://本机或服务器IP:8080 然后在创建第一个管理者界面,直接选择:使用admin 二、修改admin用户密码 进入:系统管理——管理用户——选中用户——点击设置图标——修改密码: 三、...

顾三殇 —— 博客空间(软件测试) 1万+

【MicroPython编程-ESP32篇:设备驱动】-BNO08X系列传感器驱动

BNO08X 系列(BNO085/BNO086)是一款系统级封装 (SiP),集成了三轴加速度计、三轴陀螺仪、磁力计以及运行 CEVA SH-2 固件的 32 位 ARM® Cortex™-M0+ 微控制器。SH-2 包含 MotionEngine™ 软件,该软件提供复杂的信号处理算法来处理传感器数据,并提供精确的实时 3D 姿态、航向、校准加速度和校准角速度,以及更高级的上下文输出。BNO08X 集成在一个 28 引脚 LGA 封装中,尺寸为 3.8mm x 5.2mm x 1.1mm。它兼容 Andro

视觉与物联智能 696

rails如何将数据传递到js中?

这个问题非常常见,我们经常需要将rails 中的数据传递到js变量中,然后在呈现在web页面上。前几天我就遇到了这个需求。 问题描述:我需要使用Hightcharts呈现数据,所以,我需要将数据存在在js的数组里。当时我的办法是 在application_helper.erb中新增如下方法 def rarray_to_js(arr) if arr.first.is_a? Integer

何旭东chucai的专栏 2257

ABAP 平台 SOAUTH2_CLIENT 全面实战:用一套配置,打通 OAuth 2.0 客户端的创建、联调与运维

本文是一份ABAP平台上配置OAuth 2.0客户端的全流程指南,重点介绍新界面SOAUTH2_CLIENT的使用方法。内容涵盖从概念解析到实操步骤,包括四种常见授权方式的选择、证书信任管理、Scope配置以及联调技巧。指南通过两个企业级案例(对接SAP BTP Cloud Integration和SAML 2.0身份联合)展示实际应用场景,并提供了配置清单和伪代码示例。特别强调新界面将客户端配置、令牌测试和校验功能整合的工程化优势,以及与旧事务码OA2C_CONFIG的主要差异。文中多处引用SAP官方文档

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 319

intro.js-rails 项目常见问题解决方案

intro.js-rails 项目常见问题解决方案 1. 项目基础介绍与主要编程语言 intro.js-rails 是一个开源项目,旨在将 intro.js JavaScript 库集成到 Rails 的资产管道中。intro.js 是一种更佳的方式,用于为网站和项目的新特性提供介绍和逐步的用户指南。该项目使用 Ruby 语言开发,主要应用于 Rails 环境。 2. 新手常见问题及解决步骤 问题...

gitblog_00918的博客 837

手把手教你用ESP32-S3打造智能聊天机器人-立创实战派

本文将详细介绍如何利用立创ESP32-S3开发板,烧录小智AI程序,快速实现一个功能强大的聊天机器人。

举世誉之而不加劝,举世非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。 9920

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Moment.js for Rails 项目推荐

Moment.js for Rails 项目推荐 项目基础介绍和主要编程语言 Moment.js for Rails 是一个为 Rails 应用提供 Moment.js 库的 Ruby Gem。该项目的主要编程语言是 Ruby 和 JavaScript。Ruby 用于封装和集成 Moment.js 到 Rails 的 Asset Pipeline 中,而 JavaScript 则是 Moment....

gitblog_00960的博客 728

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

如何用 importmap-rails 管理 Rails 应用的 JavaScript 依赖并引入 npm 包

如果你的 Rails 应用不想引入 Node.js、Yarn 或任何 JavaScript 打包器,又想直接复用 npm 上的现成包,`importmap-rails` 就是官方给出的默认方案。它基于浏览器的 [Import maps](https://github.com/rails/importmap-rails) 机制,用逻辑名直接映射到带版本的文件,从浏览器加载 ES 模块,无需转译或打包

gitblog_00254的博客 395

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Stimulus-Rails 安装终极方案:Import Map 与 JavaScript Bundler 对比选择

Stimulus-Rails 是一个让你在 Ruby on Rails 应用中轻松使用 Stimulus 的工具,它提供了两种主流的安装方式:Import Map 和 JavaScript Bundler。本文将深入对比这两种方案的优缺点,帮助你快速选择最适合自己项目的安装方法。 ## 🚀 两种安装方案核心差异 ### Import Map:零构建的现代前端方案 Import Map 是

gitblog_00043的博客 568

Vue.js on Rails 项目教程

Vue.js on Rails 项目教程 1. 项目目录结构及介绍 vuejs-rails/ ├── lib/ │ └── vuejs-rails/ │ ├── engine.rb │ └── version.rb ├── vendor/ │ └── assets/ │ └── javascripts/ │ ├── vue.js │ ...

gitblog_00770的博客 963

Rails Request.JS:简化Rails应用中的AJAX请求

Rails Request.JS:简化Rails应用中的AJAX请求 项目介绍 在现代Web应用开发中,AJAX请求是不可或缺的一部分。然而,处理这些请求时,尤其是与Rails框架结合时,常常需要手动设置一些必要的HTTP头,如X-CSRF-Token,这不仅繁琐而且容易出错。为了解决这一问题,Rails Request.JS应运而生。它封装了发送AJAX请求的逻辑,自动处理了Rails应用所需的...

gitblog_00122的博客 811

Intro.js for Rails 使用教程

Intro.js for Rails 使用教程 1、项目介绍 intro.js-rails 是一个将 intro.js JavaScript 库集成到 Rails 资产管道中的 gem。intro.js 提供了一种更好的方式来介绍新功能和为您的网站及项目提供用户指南。 2、项目快速启动 安装 首先,将 introjs-rails gem 添加到您的 Gemfile 中,并运行 bundle ins...

gitblog_00513的博客 823

rails 安装mysql_rails 安装mysql,js库

安装mysqlsudo apt-get install mysqlsudo apt-get install mysql-server mysql-clientsudo apt-get install libmysqlclient-devbundlerails smenxu@debian:~/文档/ruby/blogs$ rails s/home/menxu/.rvm/gems/ruby-2.0.0...

weixin_29385641的博客 151

browserify-rails多bundle配置:如何优雅拆分大型JavaScript库

在现代Web开发中,随着前端项目规模的扩大,JavaScript文件体积也随之增长,导致页面加载速度变慢。browserify-rails作为Browserify与Rails的集成工具,提供了多bundle配置功能,帮助开发者将大型JavaScript库拆分,优化资源加载。本文将详细介绍如何利用browserify-rails实现多bundle配置,提升应用性能。 ## 为什么需要多bundle

gitblog_00479的博客 770

Backbone-on-rails:在Rails中集成Backbone.js的终极指南

想要在Rails应用中构建现代化的单页面应用吗?**Backbone-on-rails** 正是您需要的解决方案!这个强大的gem让您能够轻松地将Backbone.js框架集成到Rails项目中,为您的Web应用带来响应式的前端体验。无论您是Rails新手还是经验丰富的开发者,这篇完整指南将带您快速掌握Backbone-on-rails的核心功能和最佳实践。🚀 ## 📋 什么是Backbon

gitblog_00823的博客 480

esbuild-rails:简化 Rails 应用的 JavaScript 打包

esbuild-rails:简化 Rails 应用的 JavaScript 打包 在当今的Web开发中,前端构建工具的选择对于提升开发效率和项目性能至关重要。esbuild-rails 是一个为 Rails 应用量身定制的插件,它使得 Stimulus 控制器、ActionCable 频道等 JavaScript 资源的导入变得异常简单。 项目介绍 esbuild-rails 是一个基于 esbu...

gitblog_00418的博客 1011

探索PDF.js在Rails中的无限可能:pdfjs_viewer-rails

探索PDF.js在Rails中的无限可能:pdfjs_viewer-rails 项目介绍 pdfjs_viewer-rails 是一个专为Rails开发者设计的开源项目,旨在将强大的PDF.js库无缝集成到Rails应用中。通过这个gem,开发者可以轻松地在Rails应用中嵌入PDF查看器,提供用户友好的PDF阅读体验。无论是简单的文档预览,还是复杂的PDF交互功能,pdfjs_viewer-ra...

gitblog_00953的博客 631
上一篇: rails console常用delayed_jobs命令
下一篇: mysql 系统库
solinger
博客等级 码龄16年 125粉丝 99原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值