#javascript #jquery #object #if-statement #datatables
#javascript #jquery #объект #if-оператор #таблицы данных
Вопрос:
Я пытаюсь настроить состояние кнопки с данными на основе инструкции if / else.
Объект datatable button:
buttons: [
{
text: "button text",
action: function (e, dt, node, config) {
button_action();
},
enabled: function () {
if (column_exists) {
this.enabled = true
} else {
this.enabled = false
}
}
}
]
С этим кодом моя кнопка всегда включена. Как я могу правильно установить enabled
параметр на основе инструкции if / else?
Комментарии:
1. Это полностью зависит от того, как вызывается
enabled
функция?2. …и значение
column_exists
.3. Попробуйте другое имя переменной, поскольку this.enabled заменит включенную функцию значением true. Если это то, что должно быть, используйте IIFE для возврата true или false изнутри функции.
4. каково значение column_exists
5. Для параметра enabled необходимо установить значение «true» или «false». Я просто не уверен, как я могу правильно установить этот параметр, используя инструкцию if / else. Правильно ли передается функция или я переопределяю параметр?
Ответ №1:
Вы хотите, чтобы enabled
было верно, когда column_exists
это true, и наоборот.
Итак…
buttons: [
{
text: "button text",
action: function (e, dt, node, config) {
button_action();
},
enabled: !!column_exists
}
]
!!
Это чисто мера предосторожности. Он преобразует любое значение в логическое. Если column_exists
уже было логическое значение, вам бы это не понадобилось.
При этом следующее является антипаттером.
if (somethingBoolean) {
someValue = true;
} else {
someValue = false;
}
Не делайте этого. Вместо этого просто напишите:
someValue = somethingBoolean;
или принудительно преобразовать любое значение в логическое с помощью двойного отрицания, как показано выше.
someValue = !!anyValue;
Комментарии:
1. На самом деле, column_exists — это не логическое значение, а объект. Итак, с
!!
это работает нормально.2. Обратите внимание, что пустой объект
{}
соответствует действительности, поэтому!!{}
выдает вамtrue
. Вы можете хотеть этого, а можете и не хотеть, просто имейте это в виду.3. Откуда вы знаете, что функция требует (e, dt, node, config)? Когда эта функция была определена? Я не понимаю, извините
Ответ №2:
Вы хотите создавать enabled
не функцию, а логическое значение.
Для этого вы можете использовать IIFE:
{
enabled: (function () {
if (column_exists) {
return true
} else {
return false
}
}())
// ^^
}
или просто не используйте операторы if-else, а используйте троичный оператор:
{
enabled: column_exists ? true : false
}
который в вашем случае также может быть упрощен до
{
enabled: Boolean(column_exists)
}
Комментарии:
1. @Tomalak Упс. Спасибо, исправлено.