从Jupyter Comm设置全局变量 - javascript

我正在尝试从Jupyter笔记本中的javascript中的python单元访问数据。我正在使用Jupyter的Comm功能。设置了以下HTML单元以提供d3js以及d3可以选择的<div>

%%HTML
<div class="anchor"></div>
<script>
    requirejs.config({
        paths: {
            d3: 'https://d3js.org/d3.v5'
        }
    });

    require(['d3'], function(d3) {
        window.d3 = d3;
    });
</script>

接下来,我运行一个python单元来发送通讯数据。

def target_func(comm, msg):
    comm.send({'abc': 123})

get_ipython().kernel.comm_manager.register_target('data', target_func)

最后,我运行一个javascript单元格来显示上面python单元格中的数据。我也登录到控制台以确保数据确实存在(并且确实存在)。

%%javascript
var comm = Jupyter.notebook.kernel.comm_manager.new_comm('data');
var temp
comm.on_msg(function(msg) {
    console.log(msg.content.data);
    temp = msg
});

d3.select(".anchor").append("span").text(temp);

问题:我无法从功能范围之外的通讯消息中获取数据。在上面的示例中,当d3在跨度后面加上文本时,该变量temp未定义。

如何从通讯消息中获取超出该功能范围的数据?

参考方案

如果在d3.select(".anchor").append("span").text(temp);回调中调用on_msg怎么办?

例如。:

%%javascript
var comm = Jupyter.notebook.kernel.comm_manager.new_comm('data');
var temp
comm.on_msg(function(msg) {
    console.log(msg.content.data);
    temp = msg
    d3.select(".anchor").append("span").text(temp);
});

我认为您的错误是您在定义并附加on_msg回调后立即调用d3。定义和附加该回调的行为不会使其立即运行。它仅在从内核接收到消息并且JavaScript运行时恰好可以自由运行它时运行。

所以真正发生的事情是您定义并附加了回调,然后执行d3程序,然后JavaScript引擎完成了对块的评估。并且只有在完成对块的评估之后,引擎才可以自由地接受来自内核的消息并触发回调,这时为时已晚,因为您已经调用了d3东西。

Javascript-从当前网址中删除查询字符串 - javascript

单击提交按钮后,我需要从网址中删除查询字符串值。我可以用jQuery做到这一点吗?当前网址:siteUrl/page.php?key=value 页面提交后:siteUrl/page.php 实际上,我已经从另一个带有查询字符串的页面着陆到当前页面。我需要在页面首次加载时查询字符串值以预填充一些详细信息。但是,一旦我提交了表格,我就需要删除查询字符串值。我已…

Mongo汇总 - javascript

我的收藏中有以下文件{ "_id": ObjectId("54490b8104f7142f22ecc97f"), "title": "Sample1", "slug": "samplenews", "cat": …

JavaScript中的字符串评估函数 - javascript

            JavaScript中是否有任何内置函数,例如Python中的eval内置函数?注意:eval函数将方程式作为字符串并返回结果。例如,假设变量x为2,则eval("2x+5")返回9。 参考方案 是的,JavaScript中也有eval函数。此外,该声明应有效用于评估,即eval("2*x+5"…

如何在JQuery中操作JSONArray - javascript

我有一个php函数,它以JSON返回此代码{"0":{"title":"Dans l\u2019appartement"},"1":{"title":"A l\u2019a\u00e9roport - D\u00e9part de B\u00e9at…

在两个值之间匹配并返回正则表达式 - javascript

我正在尝试使用正则表达式从字符串中获取值,该值是tt="和"&之间的文本的值因此,例如,"tt="Value"&"我只想从中得到单词"Value"。到目前为止,我已经有了:/tt=.*&/这给了我"tt=Value"&,然后,要…