Я пытаюсь получить либо options
, либо, в идеале, dynamicTable
, переданный с initializeTable
в функцию applyTableFilters
, и у меня возникают проблемы с получением ожидаемых значений. Я использую List.js для создания динамической таблицы, и мне нужно передать или воссоздать объект dynamicTable
, чтобы я мог продолжить и использовать его для фильтрации таблицы.Передача аргументов от одной функции до другой без ее вызова
Вот функция, которая создает объект List.js из HTML таблицы:
function initializeTable(options) { // initializes table to be dynamic using List.js functions
var dynamicTable = new List("table-content", options);
dynamicTable.on("updated", function (list) { // writes a message to the user if no results are found
if (list.matchingItems.length == 0) {
document.getElementById("no-results").style.display = "block";
}
else {
document.getElementById("no-results").style.display = "none";
}
});
console.log(dynamicTable);
console.log(options);
console.log(arguments.length);
applyTableFilters.bind();
}
Я пробовал различные методы, чтобы передать переменные в функции ниже. Я пробовал .call
, applyTableFilters(args)
и .apply
, но проблема в том, что я не хочу, чтобы функция выполнялась изнутри здесь, только когда событие click от кнопки гаснет (не показано в этих функциях).
Это функция, которую я хочу передать объект и продолжить, чтобы сделать функции фильтра, используя его:
function applyTableFilters(dynamicTable) {
var form = document.getElementById("filter-form");
//console.log(options);
//var dynamicTable = new List("table-content", options);
console.log(dynamicTable);
var filters = form.querySelectorAll('input[type="checkbox"]:checked');
dynamicTable.filter(function (item) {
console.log(item);
console.log(item._values);
if (item.values().id == 2) {
return true;
}
else {
return false;
}
//var filterStrings = [];
//console.log(filters);
//for (var i = 0; i < filters.length; i++) {
// var filterVal = filters[i].value;
// var filterString = "(" + item.values().column == filterVal + ")"; // filterVal.contains(item.values().column) ||
// filterStrings.push(filterString);
// console.log(filterVal);
// console.log(filterString);
//}
//console.log(filterStrings);
//var filterString = filterStrings.join(" && ");
//console.log(filterString);
//return filterString;
});
}
я использовал:
applyTableFilters.bind(this, dynamicTable/options);
applyTableFilters.bind(null, dynamicTable/options);
applyTableFilters.bind(dynamicTable/options);
Переключение между ними, так как я не нужно, чтобы оба передавались, если кто-то заканчивал работу, и т. д. Я всегда получаю событие мыши, и это даже не тот подходящий тип объекта, который я ищу. Как я могу получить правильный объект? Кроме того, все значения в первой функции не являются пустыми и заполняются так, как ожидалось, поэтому исходные переменные не являются неопределенными или нулевыми. Заранее спасибо.
Как насчет обертывание этой функции с помощью другой функции для того, чтобы создать функциональную область, которую можно предварительно включить значение аргумента вы хотите. Затем вызовите функцию обертки с другими аргументами, когда вам нужно. Вот простой пример [JSFiddle] (https://jsfiddle.net/BloodyKnuckles/76bq0pyw/), что я имею в виду. – bloodyKnuckles
@bloodyKnuckles Я пытался сделать это раньше, но я не понимаю, как это будет работать в этом случае. У меня будет пример функции 'shell()', которая принимает переменную 'dynamicTable' и передает ее в последнюю функцию, но для ее подачи она будет нуждаться в той же переменной, в которой мне нужно пройти, как это сделать Работа? Ex. 'var dynamicTable = shell()' но параметр должен быть передан для работы, знаете, что я имею в виду? – LaLaLottie