Я использую DataTables и добавляю кнопки для загрузки таблицы. Поскольку у меня есть несколько кнопок (csv, excel и т. д.) и я хочу, чтобы несколько из них запрашивали имя файла с предлагаемым значением, я хочу использовать общую функцию для каждой, чтобы она оставалась СУХОЙ.Когда я использую код из этого ответа с анонимной функцией, он работает так, как я и ожидал.
Код: Выделить всё
filename: function(){
const filename = prompt("Please enter your file name", "");
if (filename != null) {
return filename;
}
}
Но когда я перемещаю это в именованную функцию, все работает, за исключением того, что когда я закрываю диалоговое окно подсказки, файл загружается с именем по умолчанию download.csv. Я хочу, чтобы он отменил запрос и загрузку.
Код: Выделить всё
function propose_filename () {
const date = new Date()
const proposed = $(document).prop('title') + " " + date.toISOString()
const filename = prompt("Please enter your file name", proposed)
if (filename != null) {
return filename;
}
}
И я использую его здесь:
Код: Выделить всё
layout: {
bottomStart: {
buttons: [
{
extend: 'csv',
filename: propose_filename
},
{
extend: 'excel',
filename: propose_filename
},
]
}
}
Для демонстрации эти JSFiddles используют другую таблицу и т. д., но имеют мою функцию Offer_filename. И анонимная функция, и именованная функция работают правильно. Одно заметное различие между этим и моим нерабочим кодом заключается в том, что JSFiddle использует функцию dom DataTables, которая устарела, пока я использую функцию макета. Поскольку я безуспешно пытался заставить его использовать макет, это может означать, что JSFiddle использует DataTables 1 (и я не знаю, как это определить или изменить. Мой код использует DataTables 2 и макет.
Кнопка Excel запрашивает имя файла.
Анонимная функция JSFiddle
Именованный JSFiddle function
Как мне сделать так, чтобы поток отмены прошел до конца?
Подробнее здесь:
https://stackoverflow.com/questions/793 ... -canceling