36

私の目標は、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}); 

これは、directview.ipynbをロードすると機能します。ただし、完全にスタンドアロンにする方法はまだわかりません(つまり、directview.pyを必要とせず、標準handle_outputの標準以外のコールバックを渡しますIPython.OutputArea)。問題の1つはcontainer.show()、スタンドアロンで呼び出されたときに失敗することです。

私はいくつかの側面で迷子になっています:

  • なぜelement.append(widget)それからあるの$(widget).append(output)ですか?また、なぜ作成する必要があるのですかIpython.OutputArea。を作成して<div id=my_output_area>blah</div>から、outputコールバックに関連データを入力させる方法はありませんか?
  • .proxyの全体的なことは何ですか?独自のコールバックを作成したいのですoutputが、それを実行しconsole.log()て引数がコールバックに渡されると、それらはundefined役に立たないか、単に役に立たなくなります。

IPythonノートブックの作成者がjQuery/websocketsを使用してこのような美しいフロントエンドを作成するという素晴らしい仕事をしてくれたこと、そして私のような初心者がそれを微調整できるようにする開発者向けドキュメントを作成することは多くのことを求めていることを感謝しますが、誰かが貸してくれるならそれは素晴らしいだろう手!

4

1 に答える 1

2

私はあなたの2番目の質問に答えることができます。実際のところ、JavaScriptがコールバックを呼び出すときは、コンテキストを指定せずに、つまり設定せずに呼び出しますthis(Pythonistasはそれを呼び出しますself)。しかし、関数をthisviaにバインドすることは可能です。これは、次のように表示さ$.proxyれます。

var callbacks = { 'output': $.proxy(output_area.handle_output, output_area) };
于 2013-05-02T04:47:56.333 に答える