#javascript #mmenu
Вопрос:
Я хотел бы предпринять действие после открытия данной панели, например:
sidebar.API.openPanel(document.querySelector("#panel"))
.then(function)
Документация предоставляет метод привязки к действию:
sidebar.API.bind("openPanel:finish", function(panel){
function()
}
Но тогда это делается навсегда. Я хочу сделать это только один раз, и метода «отменить привязку» не существует. Есть ли какой-нибудь способ сделать это?
Ответ №1:
Вы можете использовать переменную, область действия которой находится вне .bind
функции, установить ее в true
значение внутри функции и добавить проверку выполнения кода, только если указанная переменная false
let isOpened = false
sidebar.API.bind("openPanel:finish", function(panel){
if(isOpened === false){ isOpened = true }
else return
function(){ // Here is your code that will execute only once }
}
Комментарии:
1. Спасибо. Проблема в том, что привязка по — прежнему постоянна и «подключена» — поэтому даже после того, как isOpened установлен в значение true, он все равно будет выполнять функцию на открытой панели, он просто не будет повторно выполнять привязку.
2. Я предположил, что это было только для одной панели. Возможно, вам потребуется сохранить массив или объект логических значений вместо одной переменной, если их несколько, и аналогичным образом обновить их
3. Я бы хотел, чтобы это работало только для одной панели, но проблема повторяется и здесь — предложение if фильтрует только при установке привязки, а не при ее выполнении — какова бы ни была функция, как только привязка установлена, эта функция будет выполняться каждый раз, когда срабатывает «openPanel:готово» .