2016-08-19 98 views
0

我有一個Rails 4.2.0應用程序已經運行了好幾個月了。Rails 4.2.0應用程序:刪除鏈接javascript停止工作

該應用程序在各個地方使用「刪除」作爲方法和確認提示link_to標記。這些工作正常,警報彈出,在刪除之前確認,請求按照預期路由到控制器中的銷燬操作。

今天一個應用程序用戶問我爲什麼刪除鏈接不起作用。沒有顯示確認提醒,並且生成的請求是一個簡單的GET,它被路由到show動作而不是銷燬。雖然我的用戶不會經常刪除,但我確信他們原本是在工作。

刪除鏈接不再適用於開發環境或現場環境。在加載包含鏈接的頁面或單擊刪除鏈接時,瀏覽器控制檯中沒有javascript錯誤。 Chrome,Firefox和Safari的行爲相同。

神祕的部分是,我一直在做主要的代碼和數據庫變化幾個月;我記不起最後一次添加gem或運行包安裝或更新。顯然,必須改變以打破JavaScript,但我想不出它會是什麼。

到目前爲止,我已經刪除了rails jQuery並鏈接到Google API中的一個。我已經移除了Turbolinks。我已將v.4.0.3中的jquery-rails gem更新爲4.2.1。沒有運氣。

如果任何人都可以提出一些測試或看看,這裏是從我的配置和代碼的一些摘錄(恢復上述嘗試失敗後):

Gemfile.lock的:

jquery-rails (4.0.3) 
jquery-turbolinks (2.1.0) 
jquery-ui-rails (5.0.3) 

應用的.js:

//= require jquery 
//= require jquery.turbolinks 
//= require jquery_ujs 
//= require turbolinks 
//= require jquery-ui/datepicker 
//= require jquery-ui/autocomplete 
//= require_tree . 

應用/視圖/佈局/ application.html.erb,在標籤內:

<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %> 

刪除鏈接的標籤是這樣的:

<%= link_to 'Delete', item_order_path(@item, order), method: :delete, data: { confirm: 'Are you sure?' }, class: :button %> 

在他們看起來像這樣渲染HTML:

<a data-confirm="Are you sure?" class="button" rel="nofollow" data-method="delete" href="/items/1/orders/1">Delete</a> 

什麼可以去上的任何想法?

+0

你正在使用哪個操作系統?如果是Windows,請嘗試gem'coffee-script-source','1.8.0' –

+0

我正在Mac OS X 10.11(開發,使用WEBrick服務器)或CentOS 7(生產,使用Apache和Passenger的Phusion)。 – EK0

回答

0

嗯,我發現問題是什麼(他是我自己!)。

我打算徹底刪除這個問題,但後來我發現有人可能會從查看問題的方式中受益。

首先,我想起了最後一個與寶石相關的變化是爲應用程序添加了一個自動填充字段。所以我拿出這行

//= require jquery-ui/autocomplete 

from application.js。 Etvoilà!刪除鏈接重新開始工作。

我正要自責地指責jquery-ui與Rails javascript不兼容,當我注意到刪除該行實際上是在我的javascript正在初始化自動填充字段時拋出一個異常。這聽起來很像我的應用程序的JavaScript中的某些內容干擾了鏈接javascript,這個異常巧合地阻止了被執行。

所以我恢復了application.js文件並重命名了所有的javascript資源,以便服務器不會識別它們。刪除鏈接現在再次運行。然後,我逐一恢復了每個JavaScript文件,在頁面刷新後測試鏈接。重新引入一個文件後,最終刪除鏈接停止工作:該文件是最近的更改。

問題本身就是我所有的刪除鏈接都包含在表格中,並且我最近添加了點擊處理程序來對這些表格進行排序。我的表單處理程序在click事件中停止傳播,這阻止了Rails處理程序的刪除鏈接踢入。我還沒有找到修復程序,但它可能會更仔細地針對排序事件處理程序刪除鏈接不受影響。