Пользовательский JS приложения Dash не может найти dcc.Store для обратного вызоваJavascript

Форум по Javascript
Ответить
Anonymous
 Пользовательский JS приложения Dash не может найти dcc.Store для обратного вызова

Сообщение Anonymous »

Я создаю веб-приложение, которое должно предоставлять коду Python обратный вызов всякий раз, когда пользователь щелкает правой кнопкой мыши в веб-приложении.
Я пытался сделать это с помощью dcc.Store и записать в сохранить в событии контекстного меню. Все идет нормально. Я поместил этот специальный код, который перехватывает событие контекстного меню в assets/custom.js, однако, когда я пытаюсь получить хранилище с помощью var store = document.getElementById("contextmenu_data");, он возвращает значение null, поэтому никогда вообще-то пишу что-то в магазин. Что может быть не так?
Вот MRE для кода Python и JS:
Python
import dash
from dash import dcc, html
from dash.dependencies import Input, Output

import threading

app = dash.Dash(__name__)

app.layout = html.Div([
html.Div(id="output"),
dcc.Store(id='contextmenu_data'),
])

@app.callback(Output("output", 'children'),
Input("contextmenu_data", 'data'),
)
def right_click_action(data):
print(f"right_click_action called with data: {data}")
if data:
return f"coordinates are {data}"
return "no rightclicks have happened"

def run_dash():
app.run_server(debug=False)

if __name__ == '__main__':

server = threading.Thread(target=run_dash, daemon=True)
server.start()


js
window.onload = function() {
document.addEventListener('contextmenu', function(event) {
event.preventDefault();
var store = document.getElementById("contextmenu_data");
console.log(store);
if (store) {
var data = {x: event.clientX, y: event.clientY};
store.setAttribute('data', JSON.stringify(data));
store.dispatchEvent(new CustomEvent('data'));
}
});
};



Подробнее здесь: https://stackoverflow.com/questions/793 ... r-callback
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»