2012-07-26 11 views
34

私の目標は、IPython用のインタラクティブな変数ビューアを書くことです。つまり、ネストされたdicts/listsをツリーとして表示し、ドリルダウンすることができます.log in Javascript)。IPythonカーネルJavaScriptの双方向通信の最小限の例

私は、IPythonのダイレクトビューのサンプルから最小限のコードを抽出しようと多くの時間を費やしましたが、それがどういうふうに機能するかについて頭を悩ますことはできません。私のPythonは大丈夫ですが、私のjQueryの経験はかなり限られています。

だから、私はdirectview.ipynbをロードする際にこの作品次

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.jsをダウンストリッピングになりました。しかし、私はそれを完全にスタンドアロンにする方法(すなわち、directview.pyを必要とせず、標準handle_outputIPython.OutputAreaよりも別のコールバックを渡す方法)を明らかにしていません。問題の1つは、スタンドアロンの方法で呼び出されたときに失敗するcontainer.show()です。

私はいくつかの側面に失われています:

  • はなぜelement.append(widget)、その後$(widget).append(output)ありますか?また、なぜIpython.OutputAreaを作成する必要があるのでしょうか。 <div id=my_output_area>blah</div>を作成してからoutputコールバックに関連データを入力させる方法はありませんか?
  • プロキシのことは何ですか?私はoutputのために私自身のコールバックを作成したいと思いますが、私はそれを行い、引数がコールバックに渡されたconsole.log()である場合、それらはundefinedであるか、まったく役に立たないです。

私は、IPythonのノートブックの著者はjQueryの/ WebSocketをを使用して、このような美しいフロントエンドを作成する信じられないほどの仕事をしていること、そして私のような初心者がそれを微調整することを可能にする開発者向けドキュメントの作成は多くを求めていることを理解します誰かが手を貸すことができれば偉大になるだろう!

答えて

2

私はあなたの2番目の質問に答えることができます。実際には、JavaScriptがコールバックを呼び出すときに、コンテキストを指定せずに、すなわちthis(Pythonistasはselfと呼ぶ)を設定せずにコールバックを呼び出すことができます。しかし、あなたが見た$.proxyを経由してthisに関数をバインドすることは可能です:

関連する問題