В моем приложении rails, похоже, что все файлы .js.coffee загружаются на каждую страницу, несмотря ни на что. Проблема, с которой я столкнулся, заключается в том, что файл places.js.coffee загружается, а затем возвращает нулевое значение внутри функции, потому что таблица, которую ищет файл locations.js.coffee, не существует ни на одной другой странице, которая а не на странице местоположений.Как предотвратить неправильный файл .js.coffee от загрузки
Примечание: в каждом из файлов: users.js.coffee, locations.js.coffee и campaigns.js.coffee Я разместил строки, соответственно, console.log («users.coffee загружен»), console.log («locations.coffee загружен») и console.log («campaigns.coffee загружен»), чтобы увидеть, если они загружены
Например, освежающие расположение страницы дает успешный вывод на консоль:
Но попытка попасть на страницу пользователей или кампаний будет пытаться загрузить файл locations.js.coffee, но так как таблицы, locatrions.js.coffee зависит с идентификатором #restaurantLocations
не существует пользователей или кампаний, в результате ошибки:
Для линии: table.columns().eq(0).each (colIdx)
в файле location.js.coffee.
Как предотвратить эту ошибку или разрешить загрузку правильного файла для правильной страницы и предотвратить загрузку других?
(Оставшийся locations.js.coffee код):
jQuery ->
console.log("locations.coffee loaded")
# Setup - add a text input to each footer cell
$("#restaurantLocations tfoot th").each ->
title = $("#restaurantLocations thead th").eq($(this).index()).text()
$(this).html "<input type=\"text\" placeholder=\"Search " + title + "\" />"
# DataTable
table = $("#restaurantLocations").DataTable()
# Apply the search
table.columns().eq(0).each (colIdx) ->
$("input", table.column(colIdx).footer()).on "keyup change", ->
table.column(colIdx).search(@value).draw()
# Hiding the id column, but for use for data manipulation
table.column(0).visible(false)
# Allowing multi-select
$("#restaurantLocations tbody").on "click", "tr", ->
$(this).toggleClass "selected"
# Allowing deletion (works)
$("#deleteLocations").click ->
multiSelected = table.rows(".selected").data()
table.rows(".selected").remove().draw false
for locationSelected in multiSelected
id = locationSelected[0]
$.ajax({
url: "/locations/" + id, # Note: $.ajax setup works as setting /locations/(id number) will allow deletion
type: "post",
dataType: "json",
data: {"_method":"delete"}
})
# Conditional 'Select All' (works)
$("#selectAllLocations").click ->
table.$('tr', {"filter":"applied"}).addClass "selected"
# Deselecting all (works)
$("#deSelectAllLocations").click ->
table.$("tr").removeClass "selected"
Единственное, что я бы добавил к этому ответу, это то, что если вы делаете это с помощью гигантской функции document.ready, вы, вероятно, ошибаетесь. +1 –