我的目标是为 IPython 编写一个交互式变量查看器,即允许人们查看嵌套字典/列表作为树,并向下钻取(有点像 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,并传递另一个回调而不是标准handle_output
)IPython.OutputArea
。其中一个问题是以container.show()
独立方式调用时失败。
我迷失在几个方面:
- 为什么有一个
element.append(widget)
然后$(widget).append(output)
?还有为什么还需要创建一个Ipython.OutputArea
. 有没有办法只创建一个<div id=my_output_area>blah</div>
然后让output
回调用相关数据填充它? - 整个 .proxy 是关于什么的?我想创建自己的回调,
output
但是当我这样做并且console.log()
传递给回调的参数时,它们undefined
或只是没用。
我很欣赏 IPython notebook 的作者使用 jQuery/websockets 创建了如此漂亮的前端所做的出色工作,并且创建允许像我这样的初学者调整它的开发人员文档要求很多,但是如果有人可以借那会很棒的手!