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>
然后让output
callback用相关数据填充它吗? - 什么是整个.proxy的东西呢? 我想创build自己的callback
output
但是当我这样做和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) };