nested_form gem上的jQuery冲突
所以,我认为这可能是我作为一个JS newb和最近的Rails升级的问题。我试图用Ryan Bates的nested_form gem创建一个复杂的动态嵌套表单。该页面加载好,看起来不错,但是当我点击“添加”和“删除”链接,没有任何反应。悬停在链接上给我javascript:void(0)。使用Chrome的JavaScript的观察者,我得到nested_form gem上的jQuery冲突
Uncaught TypeError: Object #<HTMLDocument> has no method 'observe'
一些谷歌搜索告诉我,这意味着我在与原型有冲突,但我不使用原型(或什么,但jQuery的)我的应用程序的任何地方。
这是我对相关信息的猜测。请告诉我,如果我遗漏了任何东西。
我在Ubuntu 12.04 LTS上使用rails 3.2.4 rc 1和ruby 1.9.3。
我的Gemfile:
source 'http://rubygems.org'
source 'http://gems.github.com'
gem 'rails', '3.2.4.rc1'
gem 'mysql'
gem 'execjs'
gem 'therubyracer'
gem 'nested_has_many_through'
gem 'validates_date_time'
group :assets do
gem 'sass-rails', '~> 3.2.3'
gem 'coffee-rails', '~> 3.2.1'
gem 'therubyracer', :platform => :ruby
gem 'uglifier', '>= 1.0.3'
end
gem 'jquery-rails', '>= 1.0.12'
gem 'formtastic', :git => 'git://github.com/justinfrench/formtastic.git', :branch => '2.1-stable'
gem "nested_form", :git => 'git://github.com/ryanb/nested_form.git'
我的树从application.js中
//= require jquery_ujs
//= require jquery
//= require jquery_nested_form
//= require_tree .
内容资产/ Java脚本的:
application.js
nested_form.js
rails.js
没有公共/ JavaScript的东西。
最后,这里的控制台页面加载(它是一个游戏的编辑页面,其行为HAS_MANY - 我试图用nested_form添加和删除行为)中提出了什么
[2012-07-15 08:10:28] INFO WEBrick::HTTPServer#start: pid=23455 port=3000
Started GET "/acts/1/edit" for 127.0.0.1 at 2012-07-15 08:10:32 -0400
Processing by ActsController#edit as HTML
Parameters: {"id"=>"1"}
Act Load (3.5ms) SELECT `acts`.* FROM `acts` WHERE `acts`.`id` = ? ORDER BY act_number LIMIT 1 [["id", "1"]]
Play Load (0.7ms) SELECT `plays`.* FROM `plays` WHERE `plays`.`id` = 1 LIMIT 1
Scene Load (0.9ms) SELECT `scenes`.* FROM `scenes` WHERE `scenes`.`act_id` = 1 ORDER BY scene_number
Rendered acts/_scene_fields.erb (2.4ms)
Rendered acts/_scene_fields.erb (1.0ms)
Rendered acts/_scene_fields.erb (1.0ms)
Rendered acts/_scene_fields.erb (1.0ms)
Rendered acts/_scene_fields.erb (1.0ms)
Rendered acts/_scene_fields.erb (1.0ms)
Rendered acts/_scene_fields.erb (1.0ms)
Rendered acts/_scene_fields.erb (1.0ms)
Rendered acts/_scene_fields.erb (1.0ms)
Rendered acts/_scene_fields.erb (1.0ms)
Rendered acts/_scene_fields.erb (1.3ms)
Rendered acts/edit.html.erb within layouts/application (317.0ms)
Completed 200 OK in 558ms (Views: 407.1ms | ActiveRecord: 12.7ms)
[2012-07-15 08:10:33] WARN Could not determine content-length of response body. Set content-length of the response or set Response#chunked = true
Started GET "/assets/jquery.js?body=1" for 127.0.0.1 at 2012-07-15 08:10:33 -0400
Served asset /jquery.js - 304 Not Modified (30ms)
[2012-07-15 08:10:33] WARN Could not determine content-length of response body. Set content-length of the response or set Response#chunked = true
Started GET "/assets/formtastic_changes.css?body=1" for 127.0.0.1 at 2012-07-15 08:10:33 -0400
Served asset /formtastic_changes.css - 304 Not Modified (3ms)
[2012-07-15 08:10:33] WARN Could not determine content-length of response body. Set content-length of the response or set Response#chunked = true
Started GET "/assets/formtastic.css?body=1" for 127.0.0.1 at 2012-07-15 08:10:33 -0400
Served asset /formtastic.css - 304 Not Modified (5ms)
[2012-07-15 08:10:33] WARN Could not determine content-length of response body. Set content-length of the response or set Response#chunked = true
Started GET "/assets/nested_form.js?body=1" for 127.0.0.1 at 2012-07-15 08:10:33 -0400
Served asset /nested_form.js - 304 Not Modified (3ms)
[2012-07-15 08:10:33] WARN Could not determine content-length of response body. Set content-length of the response or set Response#chunked = true
Started GET "/assets/application.css?body=1" for 127.0.0.1 at 2012-07-15 08:10:33 -0400
Served asset /application.css - 304 Not Modified (9ms)
[2012-07-15 08:10:33] WARN Could not determine content-length of response body. Set content-length of the response or set Response#chunked = true
Started GET "/assets/scaffold.css?body=1" for 127.0.0.1 at 2012-07-15 08:10:33 -0400
Served asset /scaffold.css - 304 Not Modified (3ms)
[2012-07-15 08:10:33] WARN Could not determine content-length of response body. Set content-length of the response or set Response#chunked = true
我怀疑有些东西我不小心打到了某个地方,或者是什么......但我不知道。
成功!
我想通了...但我仍然不明白为什么这些答案是正确的答案。谢谢大家的帮助和建议。事实证明,我必须做三件事。
1)@lest是正确的,我需要将nested_form.js从我的assets/javascripts文件夹中取出。 2)我不得不从调用javascript_include_tag:defaults切换到javascript_include_tag'application'。 3)我不得不在应用程序中重新排序我的树。JS如下(我以前有jQuery和jquery_ujs交换,在我的东西在其他地方计算器阅读推荐):
//= require jquery
//= require jquery_ujs
//= require jquery_nested_form
//= require_tree .
2)如果你生成一个新的rails应用程序,你会看到javascript_include_tag'application'。 3)jquery_ujs依赖于jquery,所以需要在它之后被需要,你可以生成一个新的rails应用程序,并检查它是如何完成的 – lest 2012-07-17 07:38:02
Prototype随附Rails,即使您不直接使用它。我之前遇到过一些冲突。您可以尝试在another Stack Overflow post上提到的建议,也就是说:
使用jQuery.noConflict();并在此之后对jQuery的所有调用应 只使用jQuery()代替$()
(顺便说一下,它如果该错误代码中发生的事情你写的或不是很清楚,我做在第三方代码中,即使它在第三方代码中,您也可以尝试修改它以仅在出现错误的部分使用jQuery(),看看是否让您超过冲突。)_
对不起,我应该更清楚。这个错误是对作为Ryan Bates的nested_form gem的一部分的nested_form.js的第一行的回应。我试着添加jQuery.noConflict();在该文件的顶部,但它没有帮助...也试图把它放在我的布局文件的头部,这也没有帮助。我认为Rails 3.2与jQuery一起提供,而不是Prototype。由于我无法找到互联网上有任何其他人有这个问题,我猜这主要是,我几乎不知道关于JavaScript。 – nilatti 2012-07-16 01:19:41
没有必要有''中的应用程序/资产/ javascripts' nested_form.js'。你已经在'application.js'中包含'jquery_nested_form'。你能否尝试删除'app/assets/javascripts/nested_form.js'文件? – lest 2012-07-16 06:57:12
是的,我这样做了......未捕获的类型错误消失了,但现在我在assets/nested_form.js上得到了404。 – nilatti 2012-07-16 14:03:44