8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

在 dash python 中使用 clientside_callback 出现“TypeError:无法读取未定义的属性”

junior207 1月前

13 0

我正在使用 dash 和 manitine 组件创建一个网站。为了控制软件包和运行网站,我使用了 poetry。该网站应该有一个 clientside_callback,用于在单击

我正在使用 dash 和 manitine 组件 来创建一个网站。为了控制软件包并运行我正在使用的网站 poetry 。该网站应该有一个 clientside_callback ,用于单击按钮时(使用任何类型的操作,如 alert or console.log() 查看它是否有效)。我想使用 ClientsideFunction 它来注册回调。

并运行网站 ClientsideFunction 实现回调时 poetry run -m website 我收到错误

TypeError: Cannot read properties of undefined (reading 'showAlert')
    at _callee2$ (callbacks.ts:160:40)
    at tryCatch (callbacks.ts:2:1)
    at Generator.<anonymous> (callbacks.ts:2:1)
    at Generator.next (callbacks.ts:2:1)
    at asyncGeneratorStep (callbacks.ts:2:1)
    at _next (callbacks.ts:2:1)
    at callbacks.ts:2:1
    at new Promise (<anonymous>)
    at callbacks.ts:2:1
    at _handleClientside (callbacks.ts:209:2)

showAlert 定义如下 /assets/js/callbacks.js .

window.dash_clientside = Object.assign({}, window.dash_clientside, {
    clientside: {
        showAlert: function(n_clicks) {
            console.log("this worked!");
            return '';
        }
    }
});

callbacks.py 我已经定义的 namespace 并且 function_name 应该存在于一个 js 文件中(即 /assets/js/callbacks.js )。

from dash import dash, Output, State, Input, callback_context, clientside_callback, ClientsideFunction

def get_callbacks(app):
    app.clientside_callback(
        ClientsideFunction(
            namespace="clientside",  # Namespace in the JavaScript file
            function_name="showAlert"  # Function name defined in the JavaScript file
        ),
        Output('connection_status', 'color'),
        Input('vnc_connect', 'n_clicks')
    )

这是 __main__.py 服务器获取布局和回调的地方。

import dash_mantine_components as dmc
from dash import Dash, _dash_renderer, html, Input, Output, callback, State
from website.layout import get_layout
from website.callbacks import get_callbacks

_dash_renderer._set_react_version("18.2.0")

app = Dash(assets_ignore=r"(?!callbacks\.js).*") # I only want this file to run

app.layout = get_layout()

get_callbacks(app)

if __name__ == "__main__":
    app.run(host="0.0.0.0", debug=True, port="8000")

这是 layout.py 由三个简单的组件组成的 mantine .

import dash_mantine_components as dmc
from dash import html

def get_layout():
    return dmc.MantineProvider(
        [
            dmc.Container([
                dmc.Badge("Disconnected", variant="dot", color="yellow", id="connection_status"),
                dmc.Button("Connect to Server", id="vnc_connect", w=200),
                dmc.PasswordInput(label="Server Password", w=200, id="server_password",placeholder="Server password", required=True),
            ])
        ]
    )

这是我当前的目录结构

 poetry.lock
 pyproject.toml
 website
     __init__.py
     __main__.py
     assets
        js
            callbacks.js
     callbacks.py
     layout.py

重新加载页面时,错误并不总是 100% 持续存在,但其持续性足以在客户端造成麻烦。

这个问题 有点相似 。当像这样直接在回调中嵌入 javascript 时,效果会好得多。

def get_callbacks(app):
    app.clientside_callback(
        """
        function(value) {
            alert("asd");
        }
        """,
        Output('connection_status', 'color'),
        Input('vnc_connect', 'n_clicks')
    )

但是当他 undefined 尝试将 javascriot 放入 js 文件时为什么会出现这种情况却没有答案。

经过一番挖掘,我发现当将 javascript 放入文件中并且它 确实 起作用时,它会在这里被看到,而当它不起作用时,它就不会被看到。

html from page

为什么我所需的 js 文件有时会出现,有时却不会出现?我该如何修复它?

帖子版权声明 1、本帖标题:在 dash python 中使用 clientside_callback 出现“TypeError:无法读取未定义的属性”
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由junior207在本站《python》版块原创发布, 转载请注明出处!
最新回复 (0)
返回
作者最近主题: