我试图组织JS文件"rails way"时,在我的Rails 4应用程序中遇到了一个问题.他们以前分散在不同的观点中.我将它们组织成单独的文件,并使用资产管道进行编译.但是,我刚刚了解到,当打开turbo-linked时,jQuery的"就绪"事件不会触发后续点击.第一次加载页面时它可以工作.但是当你点击链接时,内部的任何内容ready( function($) {都不会被执行(因为页面实际上并没有再次加载).好解释:这里.
所以我的问题是:在启用turbo-links时,确保jQuery事件正常工作的正确方法是什么?您是否将脚本包装在特定于Rails的侦听器中?或者也许rails有一些魔力让它变得不必要?文档对于它应该如何工作有点模糊,特别是关于通过像application.js这样的清单加载多个文件.
启动一个新的应用程序,当我创建一个控制器页面回家并尝试转到本地主机:3000/pages/home时,我收到以下错误:
Showing c:/Users/Doesha/desktop/pinplug/app/views/layouts/application.html.erb where line #6 raised:
TypeError: Object doesn't support this property or method
(in c:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/turbolinks-2.5.3/lib/assets/javascripts/turbolinks.js.coffee)
Run Code Online (Sandbox Code Playgroud)
application.html.erb文件:
<!DOCTYPE html>
<html>
<head>
<title>Pinplug</title>
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
<%= csrf_meta_tags %>
</head>
<body>
<%= yield %>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
application_controller.rb文件:
class ApplicationController < ActionController::Base
# Prevent CSRF attacks by raising an exception.
# For APIs, you may want to use :null_session instead.
protect_from_forgery with: :exception
end
Run Code Online (Sandbox Code Playgroud)
pages_controller.rb文件:
class PagesController < …Run Code Online (Sandbox Code Playgroud) 我试图在我的应用程序中使用带有turbolinks的Angularjs框架.页面更改后,它不会初始化新的eventlisteners.是否有任何方法使其工作?提前致谢!
我正在构建一个Rails 4应用程序,我有一些分散的js文件,我试图包括"rails方式".我将jquery插件移动到/ vendor/assets/javascripts中,并更新了清单(application.js)以要求它们.当我在本地加载页面时,我看到它们正确显示.
但是,我从其中一个已编译的脚本中获得了不一致的行为.我有一个名为projects.js的特定于控制器的js文件,它通过以下方式在application.js中引用require_tree .:
//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require bootstrap.min
//= require jquery.form.min
//= require_tree .
Run Code Online (Sandbox Code Playgroud)
我看到文件被正确包含,并且它的工作时间有一半.另一半时间,projects.js中的东西似乎没有做任何事情(它主要是jquery动画和一些ajax请求).当它不起作用时,我会点击按钮几次,什么都不会发生,然后我会抛出这个错误:
Uncaught TypeError: Cannot read property 'position' of null
turbolinks.js?body=1:75
Run Code Online (Sandbox Code Playgroud)
当脚本处于各个视图(错误的方式)时,这种情况从未发生过,所以我很确定问题不在于我的javascript代码.另一个可能相关的细节是projects.js中的东西被包装在一个$(document).ready(function(){.此外,我正在开发模式下进行测试,因此javascripts和css不会被资产管道组合.
知道这里发生了什么吗?我是Rails的新手,但我已尽力遵守所有惯例.
更新!
当我的项目脚本不起作用时,它是可预测的.第一页加载每次都有效.然后我点击一个链接到一个使用我的project.js行为的新页面,第二个页面永远不会工作.我点击几次,最终抛出上面的错误.我仍然不确定为什么,但我怀疑这与涡轮连接有关.
我正在尝试使用Rails 4和Turbolinks在具体页面中创建JS代码段.我尝试过标准解决方案:
<script type="text/javascript">
var ready = function() {
// Bla bla
};
$(document).ready(ready);
$(document).on('page:load', ready);
</script>
Run Code Online (Sandbox Code Playgroud)
但它似乎没有用.我的代码片段是这样的:
<script type="text/javascript">
function ismready()
{
var API_KEY = "api key";
var roomId = "room id";
var ism = new Ismuser(API_KEY, roomId);
ism.init({
board: {
layer: "board"
},
video: {
camsContainer: "guest"
},
chat: {
layer: "chat"
},
moderator: true,
});
}
</script>
<script src="http://assets.ismuser.com/v0.4/js/ismuser.js" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)
该片段无法按预期工作(即使使用标准解决方案),最后我只想在此页面中禁用Turbolinks.
我该怎么做?
- 解决方案
<% content_for :body do %>
<% if controller.controller_name == 'home' && controller.action_name == …Run Code Online (Sandbox Code Playgroud) 只是想知道是否有一种方法可以直接在rails link_to帮助器中使用turbolinks,快速的谷歌搜索没有发现任何注意事项,这是我试图无济于事的类型.
<%= link_to 'Giraffe', giraffe_path(@giraffe), :data-no-turbolink => 'true' %>
<%= link_to 'Giraffe', giraffe_path(@giraffe), :data { :no-turbolink => 'true'} %>
Run Code Online (Sandbox Code Playgroud)
我知道你可以在这样的常规链接中做到这一点
<a data-no-turbolink='true' href="/giraffe-130">Giraffe</a>
Run Code Online (Sandbox Code Playgroud)
现在我只是将属性包含在链接周围的元素上,例如lis或div.
提前致谢.
我想知道在Rails 4中实施Google Analytics跟踪代码以及turbo链接的最佳方法是什么.普通代码段是否有效?我也看过这个宝石,但我不确定它是做什么的.
ruby google-analytics ruby-on-rails turbolinks ruby-on-rails-4
我有一个新的Rails 4应用程序,它不包含自定义Javascript - 文件夹app/assets/javascripts,lib/assets/javascripts并且vendor/assets/javascripts都是空的(除了app/assets/javascripts/application.js).
当我点击应用程序时,我一直jquery-ujs has already been loaded!在JS控制台中收到错误.每次我点击"后退"按钮时都会发生这种情况,有时当我点击正常链接时(虽然我无法让它始终如一地发生).
application.js中:
//= require jquery
//= require jquery_ujs
//= require twitter/bootstrap
//= require turbolinks
//= require_tree .
Run Code Online (Sandbox Code Playgroud)
当我从application.js中删除turbolinks时,我不再收到错误...所以turbolinks似乎是罪魁祸首.
这是turbolinks的错误,还是我做错了什么?
这是我的Gemfile:
source 'https://rubygems.org'
ruby '2.0.0'
gem 'rails', '4.0.0'
gem 'active_model_serializers'
gem 'aws-sdk'
gem 'bootstrap-sass-rails'
gem 'coffee-script-source', '1.5.0'
gem 'coffee-rails', '~> 4.0.0'
gem 'devise'
gem 'factory_girl_rails', '4.1.0'
gem 'figaro'
gem 'font-awesome-sass-rails'
gem 'jbuilder', '~> 1.2'
gem 'jquery-rails'
gem 'paperclip'
gem 'paperclip-meta', github: …Run Code Online (Sandbox Code Playgroud) 有没有办法使用turbo-links制作Youtube样式加载栏(跨顶栏的页间).
Turbolinks有很多不同的回调,所以你可以跨越几个步骤制作一个跳跃的但是有没有办法挂钩进展呢?
turbolinks ×10
javascript ×5
jquery ×3
ruby ×2
ajax ×1
angularjs ×1
execjs ×1
progress-bar ×1
windows ×1