2012-07-15 34 views
1

所以,我認爲這可能是我作爲一個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

沒有必要有''中的應用程序/資產/ javascripts' nested_form.js'。你已經在'application.js'中包含'jquery_nested_form'。你能否嘗試刪除'app/assets/javascripts/nested_form.js'文件? – lest 2012-07-16 06:57:12

+0

是的,我這樣做了......未捕獲的類型錯誤消失了,但現在我在assets/nested_form.js上得到了404。 – nilatti 2012-07-16 14:03:44

回答

1

成功!

我想通了...但我仍然不明白爲什麼這些答案是正確的答案。謝謝大家的幫助和建議。事實證明,我必須做三件事。

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 . 
+0

2)如果你生成一個新的rails應用程序,你會看到javascript_include_tag'application'。 3)jquery_ujs依賴於jquery,所以需要在它之後被需要,你可以生成一個新的rails應用程序,並檢查它是如何完成的 – lest 2012-07-17 07:38:02

0

Prototype隨附Rails,即使您不直接使用它。我之前遇到過一些衝突。您可以嘗試在another Stack Overflow post上提到的建議,也就是說:

使用jQuery.noConflict();並在此之後對jQuery的所有調用應 只使用jQuery()代替$()

(順便說一下,它如果該錯誤代碼中發生的事情你寫的或不是很清楚,我做在第三方代碼中,即使它在第三方代碼中,您也可以嘗試修改它以僅在出現錯誤的部分使用jQuery(),看看是否讓您超過沖突。)_

+0

對不起,我應該更清楚。這個錯誤是對作爲Ryan Bates的nested_form gem的一部分的nested_form.js的第一行的迴應。我試着添加jQuery.noConflict();在該文件的頂部,但它沒有幫助...也試圖把它放在我的佈局文件的頭部,這也沒有幫助。我認爲Rails 3.2與jQuery一起提供,而不是Prototype。由於我無法找到互聯網上有任何其他人有這個問題,我猜這主要是,我幾乎不知道關於JavaScript。 – nilatti 2012-07-16 01:19:41