IPython内核javascript双向通信的简约示例

IPython内核javascript双向通信的简约示例,javascript,jquery,python,ipython,Javascript,Jquery,Python,Ipython,我的目标是为IPython编写一个交互式变量查看器,也就是说,它允许一个人看到,比如说,嵌套的dict/列表作为一个树,并向下钻取(有点像Javascript中的console.log) 我花了很多时间试图从IPython中的directview示例中提取最简单的代码,但仍然无法理解它是如何工作的。我的Python还可以,但我的jQuery经验非常有限 因此,我将directview.js剥离到以下内容 container.show(); var widget = $('<div/>

我的目标是为IPython编写一个交互式变量查看器,也就是说,它允许一个人看到,比如说,嵌套的dict/列表作为一个树,并向下钻取(有点像Javascript中的console.log)

我花了很多时间试图从IPython中的directview示例中提取最简单的代码,但仍然无法理解它是如何工作的。我的Python还可以,但我的jQuery经验非常有限

因此,我将directview.js剥离到以下内容

container.show();
var widget = $('<div/>')
element.append(widget);
var output = $('<div></div>');
$(widget).append(output)
var output_area = new IPython.OutputArea(output, false);
var callbacks = { 'output': $.proxy(output_area.handle_output, output_area) };
var code  = 'print 1+1'
var msg_id = IPython.notebook.kernel.execute(code, callbacks, {silent: false}); 
container.show();
变量小部件=$(“”)
元素。追加(小部件);
变量输出=$('');
$(小部件).append(输出)
var output_area=新的IPython.OutputArea(输出,false);
var回调={'output':$.proxy(output\u area.handle\u output,output\u area)};
变量代码='打印1+1'
var msg_id=IPython.notebook.kernel.execute(代码,回调,{silent:false});
这在加载directview.ipynb时起作用。但是,我仍然不清楚如何使其完全独立(即不需要directview.py,并传递另一个回调,而不是
IPython.OutputArea的标准
handle\u输出
)。其中一个问题是
container.show()
,以独立方式调用时失败

我在以下几个方面迷失了方向:

  • 为什么会有一个
    元素.append(小部件)
    ,然后是
    $(小部件).append(输出)
    ?另外,为什么还需要创建
    Ipython.OutputArea
    。难道没有办法只创建一个
    blah
    ,然后让
    输出
    回调用相关数据填充它吗
  • 代理是怎么回事?我想为
    output
    创建我自己的回调,但是当我这样做时,以及
    console.log()
    传递给回调的参数,它们是
    未定义的
    ,或者根本没有用

我很感激IPython笔记本的作者们用jQuery/websockets创建了如此漂亮的前端,而且创建开发人员文档,让像我这样的初学者能够对其进行调整要求很高,但是如果有人能帮上忙,那就太好了

我可以回答你的第二个问题。事实上,当JavaScript调用回调时,它会在不指定上下文的情况下调用回调,即不设置
this
(Pythonistas称之为
self
)。但是可以通过
$.proxy
将函数绑定到
,您可以在以下内容中看到:

var callbacks = { 'output': $.proxy(output_area.handle_output, output_area) };