2012-07-26 19 views
34

Mi objetivo es escribir un visor de variables interactivas para IPython, es decir, que permita ver divisiones/listas anidadas como un árbol y profundizar (un poco como la consola .log en Javascript).Ejemplo minimalista de kernel de IPython comunicación bidireccional de javascript

Pasé mucho tiempo tratando de extraer código minimalista del ejemplo de DirectView en IPython, pero todavía no entiendo cómo funciona todo. My Python está bien, pero mi experiencia jQuery es bastante limitada.

Así que llegué a despojar a la siguiente 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}); 

Esto funciona cuando la carga del directview.ipynb. Sin embargo, aún no estoy seguro de cómo hacerlo completamente independiente (es decir, no requiere el directview.py, y pasar otra devolución de llamada que el estándar handle_output de IPython.OutputArea). Uno de los problemas es el container.show() que falla cuando se lo llama de manera independiente.

estoy perdido en varios aspectos:

  • ¿Por qué hay un element.append(widget) y luego $(widget).append(output)? Además, ¿por qué también es necesario crear un Ipython.OutputArea. ¿No hay una manera de simplemente crear un <div id=my_output_area>blah</div> y luego tener la devolución de llamada output llenarlo con los datos relevantes?
  • ¿De qué se trata toda la .proxy? Me gustaría crear mi propia devolución de llamada para output pero cuando hago eso y console.log() los argumentos pasan a la devolución de llamada, son undefined o simplemente inútiles.

Soy consciente de que los autores de la portátil IPython han hecho un trabajo increíble creando un hermoso front-end tales usando jQuery/websockets, y que la creación de documentación para desarrolladores que permite a los principiantes como yo, para ajustar con él está pidiendo mucho, pero si alguien puede dar una mano, ¡sería genial!

Respuesta

2

Puedo responder a su segunda pregunta. El hecho es que cuando JavaScript llama a su devolución de llamada, lo hace sin especificar el contexto, es decir, sin configurar this (los Pythonistas lo llaman self). Pero es posible enlazar una función a this a través de $.proxy, que usted vio en:

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