2012-07-26 5 views
34

मेरा लक्ष्य आईपीथॉन के लिए एक इंटरैक्टिव वेरिएबल व्यूअर लिखना है, यानी एक को देखने के लिए अनुमति देता है, नेस्टेड डाइक/सूचियों को पेड़ के रूप में कहें, और कंसोल की तरह थोड़ा (कंसोल की तरह थोड़ा जावास्क्रिप्ट में .log)।आईपीथॉन कर्नेल जावास्क्रिप्ट द्वि-दिशात्मक संचार का न्यूनतम उदाहरण

मैंने आईपीथन में डायरेक्टव्यू उदाहरण से कम से कम कोड निकालने का प्रयास करने में काफी समय बिताया लेकिन अभी भी यह सब काम नहीं कर रहा है कि यह सब कैसे काम करता है। मेरा पायथन ठीक है लेकिन मेरा jQuery अनुभव काफी सीमित है।

तो मैं निम्नलिखित

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.js नीचे अलग करना होगा। हालांकि मैं अभी भी स्पष्ट नहीं हूं कि इसे पूरी तरह से स्टैंडअलोन कैसे बनाया जाए (यानी directview.py की आवश्यकता नहीं है, और IPython.OutputArea के मानक handle_output की तुलना में एक और कॉलबैक पास करें)। मुद्दों में से एक container.show() है जो स्टैंडअलोन तरीके से कॉल होने पर विफल रहता है।

मैं खो गया हूँ कई पहलुओं पर:

  • क्यों वहाँ एक element.append(widget) और फिर $(widget).append(output) है? Ipython.OutputArea बनाने की भी आवश्यकता क्यों है। क्या <div id=my_output_area>blah</div> बनाने के लिए कोई तरीका नहीं है और फिर output कॉलबैक प्रासंगिक डेटा के साथ भरें?
  • संपूर्ण क्या है। इसके बारे में प्रैक्टिस चीज़? मैं output के लिए अपना खुद का कॉलबैक बनाना चाहता हूं लेकिन जब मैं ऐसा करता हूं और console.log() कॉलबैक में दिए गए तर्क, वे undefined या बस बेकार हैं।

मुझे खुशी है कि IPython नोटबुक के लेखकों इतनी सुंदर सामने के अंत jQuery/WebSockets का उपयोग कर बनाने एक अविश्वसनीय काम किया है, और है कि डेवलपर दस्तावेज़ है कि यह बहुत पूछ रहा है के साथ बदलाव करने की अनुमति देता है मेरे जैसे शुरुआती बनाने, लेकिन अगर कोई हाथ उधार दे सकता है तो यह बहुत अच्छा होगा!

उत्तर

2

मैं आपके दूसरे प्रश्न का उत्तर दे सकता हूं। तथ्य यह है कि जब जावास्क्रिप्ट आपके कॉलबैक को कॉल करता है, तो यह संदर्भ निर्दिष्ट किए बिना ऐसा करता है, यानी this सेट किए बिना (पायथनिस्टस इसे self पर कॉल करें)। लेकिन this पर के माध्यम से एक फ़ंक्शन को बाध्य करना संभव है, जिसमें आपने देखा:

var callbacks = { 'output': $.proxy(output_area.handle_output, output_area) }; 
संबंधित मुद्दे