ducument.ready不生效的问题 ruby on rails

rails web app页面之间的跳转的时候使用ducument.ready只有在再次加载的时候才生效, 因为rails用了turbolinks,

https://github.com/turbolinks/turbolinks/blob/master/README.md#running-javascript-when-a-page-loads

Running JavaScript When a Page Loads

You may be used to installing JavaScript behavior in response to the window.onloadDOMContentLoaded, or jQuery readyevents. With Turbolinks, these events will fire only in response to the initial page load—not after any subsequent page changes.

In many cases, you can simply adjust your code to listen for the turbolinks:load event, which fires once on the initial page load and again after every Turbolinks visit.

document.addEventListener("turbolinks:load", function() {
  // ...
})

When possible, avoid using the turbolinks:load event to add event listeners directly to elements on the page body. Instead, consider using event delegation to register event listeners once on document or window.

  1. $(document).ready 依赖于 DOMContentLoaded 事件
  2. Turbolinks 接管页面后换页不会产生 DOMContentLoaded,所以换页之后 $(document).ready 无效
  3. Turbolinks 提供了 page:change 取代 $(document).ready
  4. 现在第一次加载也会触发 page:change 了,所以 page:change 可以替代 $(document).ready

要注意 turbolinks 会缓存访问过的页面,缓存 restore 的时候也会触发 page:chang,这样的代码在用户后退的时候会重复绑定:

$(document).on ‘page:change‘, ->
  $(‘body‘).on ‘click‘, ->
    console.log(‘hit‘)

page:change 和 $().ready 逻辑一样,区别是 turbolinks restore 的时候页面带着之前的状态,而传统页面后退的时候是干净的。

如果要用 turbolinks,最好就用 page:change,并且要写可以反复执行不冲突的代码。

现在用 page:change 很少,换成这样写:

$(document).on ‘click‘, ‘body‘, ->
  console.log(‘hit‘)

还有个 page:load,考虑到 restore 的问题,page:load 才是对应 $().ready

document.addEventListener("turbolinks:load",
  function() {
    if ($(‘#component_component_type‘).attr("data-value") == "display_item") {
      $(‘.display-item-select‘).show();
      $(‘.grid-select‘).hide();
    } else if($(‘#component_component_type‘).attr("data-value") == "grid") {
      $(‘.grid-select‘).show();
      $(‘.display-item-select‘).hide();
    } else {
      $(‘.grid-select‘).hide();
      $(‘.display-item-select‘).hide();
    }
})

$(document).on(‘change‘, ‘#component_component_type_id‘, function(e) {
    if ($(‘#component_component_type_id‘).find("option:selected").text() == "display_item") {
      $(‘.display-item-select‘).show();
      $(‘.grid-select‘).hide();
    } else if($(‘#component_component_type_id‘).find("option:selected").text() == "grid") {
      $(‘.grid-select‘).show();
      $(‘.display-item-select‘).hide();
    } else {
      $(‘.grid-select‘).hide();
      $(‘.display-item-select‘).hide();
    }
});

 

时间: 2024-10-18 22:18:30

ducument.ready不生效的问题 ruby on rails的相关文章

10 steps to get Ruby on Rails running on Windows with IIS FastCGI

Since the original tech preview release of FastCGI last year, we've been seeing a lot of requests for getting Ruby on Rails running with our FastCGI.  Theoretically, since the FastCGI component uses a standard protocol to support FastCGI-enabled appl

用 Ubuntu 12.04 搭建一个 Ruby on Rails 本地开发环境

转载,原文链接 http://linux.cn/portal.php?mod=view&aid=170 用 Ubuntu 搭建一个 Ruby on Rails 本地开发环境 想要开发 Ruby on Rails 应用吗?虽然已经有一些(初级的)Ruby on Rails 教程了,但是似乎在如何搭建一个简洁而更新的本地开发环境方面还有些不甚确定的地方. 这个教程将引导你通过几个步骤来搭建一个基于 Ubuntu 的 Ruby on Rails 本地开发环境.而这个教程的即将发布的第二部分,将帮助你搭

ruby on rails如何安装

很多朋友在学习ruby语言时,因为才接触,对于ruby基础知识都不知道,比如ruby on rails安装等基础教程,下面就一起来看看安装ruby on rails教程(http://www.maiziedu.com/course/ruby/)吧: 第一,安装ruby,首先从 http://www.ruby-lang.org/zh_CN/downloads/ 下载 Ruby 的Windows 稳定安装版 Ruby 1.8.6 一步安装 (md5: 00540689d1039964bc8d844b

Ruby on Rails环境搭建及rubyMine安装

最近在学ruby,ruby是一种面向对象的编程语言,rails是Ruby的框架,就像java中的SSH一样.只是rails是MVC模式的.下面讲一下安装环境的过程. 安装Ruby on rails环境主要参考的是Ruby-china上面的教程贴,链接在此:https://ruby-china.org/wiki/install_ruby_guide 另外,最好在linux内核上面使用,所以开始安装前请确保有一台linux内核的机器或者虚拟机或者双系统. 1.安装Ruby 现在的ruby版本应该是2

[ruby on rails] 跟我学之创建数据

通过form来创建数据,本章节将会涉及内容:创建form,用户重导向,渲染views 和 flash消息. 1. views初步 编辑 app/views/posts/index.html.erb这个view文件,如下: <% @posts.each do |post| %> <h2><%=link_to post.title,post%></h2> <%=post.context%><br/><hr/> <% en

[Ruby on Rails系列]3、初试Rails:使用Rails开发第一个Web程序

本系列前两部分已经介绍了如何配置Ruby on Rails开发环境,现在终于进入正题啦! Part1.开发前的准备 本次的主要任务是开发第一个Rails程序.需要特别指出的是,本次我选用了一个(PaaS开发平台),也就是Rails教程中介绍的Cloud 9平台,该平台已经自动为我们作好了环境配置的工作:只要你有一个浏览器就可以使用该云端开发环境.非常的方便快捷!简直赞!平台网址如下:https://c9.io/ Cloud 9开发平台的实质是为每一个注册的开发者在服务器端分配一个Linux虚拟机

《Ruby on Rails Tutorial》

总共分为11章节,一个简单的微博系统.完全是以测试去驱动开发,所以书里面有很多测试代码,刚开始会觉得很不习惯,然后过了一段时间后,还是不习惯这样的开发方式.最后选择以自己的方式来整理书里面的知识点.也就是说,我把开发的部分,跟测试部分,区分开来.后面想了下,觉得知识点可以分为以下4点. 1.git的使用初始化项目 git init添加内容 git add .提交到本地仓库 git commit -m "备注"提交到远程分支 git push拉取内容 git pull查看分支 git b

[Ruby on Rails系列]2、开发环境准备:Ruby on Rails开发环境配置

前情回顾 上次讲到Vmware虚拟机的安装配置以及Scientific Linux 6.X系统的安装.这回我们的主要任务是在Linux操作系统上完成Ruby on Rails开发环境的配置. 在配置环境之前,首先要解释一下Scientific Linux 6.x,该Linux发行版与CentOS.Red Hat Linux的管理机制比较类似.如果你的Linux采用的是上述系统,基本上配置过程完全一致:如果你采用的是Ubuntu系统,配置过程可能会稍有不同. 那么,Start![请以管理员账号登陆

ruby on rails错误undefined method `title&#39; for nil:NilClass

首先搞清楚这句话,在 Ruby 中,方法分为 public.private 和 protected 三种,只有 public 方法才能作为控制器的动作. 我的出错的代码如下: controlle class ArticlesController < ApplicationController def new end def create params.permit! @article = Article.new(params[:article]) @article.save redirect_t