如何动态生成一个块状下拉菜单的内容?

2024-09-19 20:51:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用python和flask编写一个应用程序。 在webinterface中,用户可以使用块来定制小程序。在

一些已经存在的块有一个下拉菜单。在

一切都很好。 但是现在我想要一个带有下拉菜单的块,其中的选项是在一个usb棒上的特定文件python后端通过遍历usb棒目录找到的。在

我想现在用这些文件填充下拉菜单。但是,我不能提前知道它们,这就是为什么它们必须动态生成的原因——但是要用python,而不是javascript之类的。在

我已经在这里找到了:https://developers.google.com/blockly/guides/create-custom-blocks/dropdown-menus(在末尾的“dynamicmenu”处),但这对我来说没有帮助,因为我希望信息来自python后端,而不是javascript。在

有人知道怎么做吗?在

提前谢谢你!在


Tags: 文件用户https程序目录应用程序flask选项
1条回答
网友
1楼 · 发布于 2024-09-19 20:51:54

这是一个很老的问题,所以我不确定操作是否还需要答案,但我是基于这样一个假设来回答的:在这种情况下,操作使用异步JavaScript调用后端,因此不能仅仅返回结果。在

在我们的应用程序中,我们有一个相同的情况(尽管使用了nodejs后端),我们根据从Google云数据存储中检索到的选项填充下拉列表。我们有一个React应用程序,所以我们的解决方案是将一个Flux存储附加到我们的异步调用完成后填充的窗口,然后让下拉生成代码访问该存储。显然,全流量存储可能不适合所有情况,但我的一般建议是传入一个选项生成器函数,并从窗口上的存储或其他变量中读取,然后在页面加载时运行对后端的调用(或在其他适当的情况下),并在窗口中填充存储。如果你的应用程序在调用完成前初始化,你可以设置它来显示它正在根据商店上的标志加载选项。在

作为一个非常简单的例子,您可能会:

// on page load
window.store = {done: false};
myBackendCall()
.then(function(results){
    window.store = {
        results: results,
        done: true
    };
})
.catch(function(error){
    console.error(error);
    window.store = {results: [], done: true};
});

然后在你的选择器中,你可以使用类似于:

^{pr2}$

显然,这是一个粗略的简化,但我认为这已经足够展示技术了。实际上,出于其他原因,我们为这个定制了块字段,但这应该仍然适用于香草块下拉列表。如果你的设置是这样的话,用承诺链代替回调。您也可以在块内部进行调用,并在块本身上设置一个变量(this.store或其他),但这将导致对块的多个实例进行多次调用,因此这可能不适合您。在

相关问题 更多 >