IPython内核javascript双向通信的简单例子

我的目标是为IPython编写一个交互式variables查看器,也就是说,可以查看嵌套的字典/列表树,并向下钻取(有点像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}); 

这个工程当我加载directview.ipynb。 但是,我仍然不清楚如何使其完全独立(即不需要directview.py,并传递比IPython.OutputArea的标准handle_output另一个callback)。 其中一个问题是container.show()在以独立方式调用时失败。

我迷失在几个方面:

  • 为什么有一个element.append(widget) ,然后$(widget).append(output) ? 另外为什么还需要创build一个Ipython.OutputArea 。 没有办法创build一个<div id=my_output_area>blah</div>然后让outputcallback用相关数据填充它吗?
  • 什么是整个.proxy的东西呢? 我想创build自己的callbackoutput但是当我这样做和console.log()parameter passing给callback,他们是undefined或只是无用的。

我明白,IPython笔记本的作者在使用jQuery / websockets创build如此漂亮的前端方面做了一个令人难以置信的工作,而且创build开发者文档让像我这样的初学者可以调整它,但是如果任何人都可以借给那手太棒了!

我可以回答你的第二个问题。 事实上,当JavaScript调用你的callback函数时,它没有指定上下文,也就是没有设置(Pythonistas self )。 但是可以通过$.proxy绑定一个函数,你可以在这里看到:

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