2013-01-14 25 views
0

我正在使用DataTables与我的Rails应用程序。在Rails中的数据表 - 如何摆脱“无法重新初始化DataTable”错误

出于某种原因,DataTables/JQuery似乎认为我试图重新初始化DataTable。每当我加载使用数据表的页面时,它给这个错误:

DataTables warning (table id = 'DataTables_Table_0'): Cannot reinitialise DataTable. 
To retrieve the DataTables object for this table, pass no arguments or see the docs for bRetrieve and bDestroy 

这究竟是为什么?我只页面加载脚本一次,据我可以看到,我知道它会产生每页只有一个表元素...

/application/views/layouts/application.html.haml

!!! 
%html 
    %head 
    = javascript_include_tag "application" 
    %body 
    = yield 

/application/views/reports/index.html.haml

%table 
    %thead 
    %tr 
     %th Short Name 
     %th Controls 
    %tbody 
    - @reports.each do |report| 
     %tr 
     %td= link_to report.full_name, report_path(report) 
     %td 
      = link_to "Edit", edit_report_path(report) 
      \| 
      = delete_link "Delete", report_path(report) 

我敢肯定,我已经正确设置了资产管道...

/assets/javascripts/application.js

//= require jquery 
//= require jquery_ujs 
//= require dataTables/jquery.dataTables 
//= require html5shiv 
//= require_tree . 

而且我敢肯定,我打电话正确的DataTable ...

/assets/javascripts/tables.js。咖啡

jQuery -> 
    $('table').dataTable 
    sPaginationType: "full_numbers" 
    bJQueryUI: true 

而且我不认为我的任何宝石将导致此行为:

的Gemfile

source "http://rubygems.org" 

gem "rails", "3.2.11" 
gem "activesupport" 
gem "actionmailer" 
gem "mail" 
gem "railties" 
gem "compass" 
gem "pg" 
gem "sass" 
gem "sass-rails" 
gem "haml" 
gem "haml-rails" 
gem "susy" 
gem "jquery-rails" 
gem "google-analytics-rails" 
gem "declarative_authorization" 
gem "authlogic" 
gem "simple_form" 
gem "country-select" 
gem "rails3-generators" 
gem "hirb" 
gem "debugger" 
gem "redis" 
gem "RedCloth" 
gem "friendly_id" 
gem "high_voltage" 
gem "validatious" 
gem "houdini" 
gem "rspec-rerun" 
gem "html5shiv-rails" 
gem "normalize-rails" 
gem "simple-navigation" 
gem "thin" 

group :development do 
    gem "taps" 
    gem "better_errors" 
    gem "binding_of_caller" 
end 

group :test do 
    gem "capybara" 
    gem "rspec-rails" 
    gem "database_cleaner" 
    gem "launchy" 
    gem "spork", "0.9.2" 
    gem "respec" 
end 

group :assets do 
    gem "better_errors" 
    gem "sass-rails" 
    gem "coffee-rails" 
    gem "compass-rails" 
    gem "compass-susy-plugin" 
    gem "fancy-buttons" 
    gem 'jquery-datatables-rails', github: 'rweng/jquery-datatables-rails' 
    gem "jquery-ui-rails" 
    gem "uglifier" 
end 

更新:我知道这有东西做与资产管道,因为在生产相同的代码在Heroku(rake assets:precompile后)不会引起问题它正在开发中(这里应用程序为我即时装配资产)。

+1

jQuery选择器'$('table')'是非常通用的。如果页面中有多个表格可能导致问题。尝试更具体的选择器,如ID。看到浏览器源代码会更好,因为这是错误发生的地方 – charlietfl

+0

是的,谢谢。虽然我不确定为什么只有一个表格在浏览器源代码中可见。 –

+0

我认为datatables可能需要用于包装的ID,以帮助保持实例隔离..不是100%确定 – charlietfl

回答

0

如果dataTables js在数据初始化之前触发,则会发生此错误。请尝试移动

= javascript_include_tag “应用程序”

到页面的底部。

======

!!! 
%html 
    %head 

    %body 
    = yield 
    = javascript_include_tag "application" 
0

尝试梳理如下

$('selector').dataTable({...}); 

1。代替选择者大多数情况下,你应该使用ID,

  1. 实际问题是你不应该使用重复ID或者如果你使用class作为选择器,你不应该使用该类作为多个元素(听起来令人讨厌)因此更好地使用选择器作为ID(ID不应该为元素重复)
相关问题