2011-12-04 23 views
9

मैं अबोज के सभी pocket में फ़ंक्शंस प्रदान करने की कोशिश कर रहा हूं। मैं _.extend द्वारा हर किसी की जेब में ऐसा करना चाहता हूं, यानी everyone.now। किसी कारण से जिसे मैं समझ नहीं पा रहा हूं, _.extend क्लाइंट पक्ष पर फ़ंक्शन को उचित रूप से प्रदान करने में विफल रहता है।मैं अबोज़ में हर किसी की जेब क्यों नहीं बढ़ा सकता?

यह मेरे वर्तमान कोड है:

var _ = require("underscore"), 
    everyone = require("nowjs").initialize(app); 

everyone.now.foo = function() {}; 

_.extend(everyone.now, { 
    bar: function() {} 
}); 

console.log(everyone.now.foo); // [Function] 
console.log(everyone.now.bar); // undefined 

दोनों सर्वर और ग्राहक पक्षों, मैं now.foo() ठीक कर सकते हैं पर। दूसरी तरफ, now.bar() विफल रहता है क्योंकि now.bar परिभाषित नहीं किया गया है। क्लाइंट और सर्वर दोनों पक्षों पर यह मामला है। मैंने सर्वर की तरफ अस्तित्व की जांच करने की कोशिश की, जैसा कि अंतिम पंक्ति पर ऊपर दिखाया गया है। हालांकि, यह लाइन undefined लॉग करती है।

अंडरस्कोर का extend फ़ंक्शन (स्पष्ट रूप से) अन्य ऑब्जेक्ट्स पर काम करता है, इसलिए मुझे लगता है कि इसका उपयोग "जादुई नेमस्पेस" के साथ कुछ करना है जो अबोज उपयोग करता है।

विस्तार कैसे आ रहा है everyone.now के साथ काम नहीं करता है और मैं इसे कैसे काम कर सकता हूं?


संपादित करें 2: मैं प्रॉक्सी में कुछ और खोदा। ऐसा लगता है कि एक चर को पार करके प्रॉक्सी पर एक प्रॉपर्टी सेट करना है क्योंकि इसका नाम काम नहीं करता है। मैंने अपना पहला संपादन हटा दिया क्योंकि यह टेस्टकेस अधिक संकुचित है।

यह क्यों काम नहीं कर रहा है? क्या यह एक बग है? (अधिकांश समय मैं इस अपने आप से पूछना मैं जानता हूँ कि यह नहीं है, लेकिन यह वास्तव में मुझे जानकारी नहीं कर रहा है ...)

var proxy = Proxy.create({ 
    get: function(pr, name) { 
     console.log("get called"); 
     return null; 
    }, 

    set: function(pr, name, value) { 
     console.log("set called"); 
    } 
}); 

var key = "foo"; 

proxy["foo"] = "bar"; 
proxy[ key ] = "bar"; 

proxy["foo"]; 
proxy[ key ]; 

लॉग परिणाम:

set called 
get called 
get called 

जाहिर है, proxy[ key ] = "bar"; का कारण नहीं है प्रॉक्सी पर set कहलाए जाने के लिए। ऐसा क्यों है?

+0

मेरे सिस्टम पर एक ही चीज़ चलाना प्रत्येक समारोह में दो कॉल के अपेक्षित परिणाम प्राप्त करता है। आपके पास नोड और नोड-प्रॉक्सी का संस्करण क्या है? – loganfsmyth

+0

@ लोगन एफ स्माइथ: मैं नोड 0.6.5 पर चल रहा हूं जो कल बाहर आया था। मैं '--harmony_proxies' ध्वज के साथ नोड चला रहा हूं, इसलिए मुझे तीसरे पक्ष की लाइब्रेरी की आवश्यकता नहीं है। यह हो सकता है कि वी 8 के कार्यान्वयन में इस समय बग शामिल हों जबकि नोड-प्रॉक्सी नहीं है। मैं इसे देख लूंगा, धन्यवाद। – pimvdb

उत्तर

0

वे posted a blog entry कैसे विंडोज पर node-proxy का उपयोग करने पर NowJS वेबसाइट पर, के बजाय देशी वी 8 कार्यान्वयन --harmony_proxies ध्वज का उपयोग कर।

ऐसा प्रतीत होता है कि वर्तमान में नोड के वी 8 संस्करण में प्रॉक्सी के संबंध में कई बग शामिल हैं, जो प्रश्न में उल्लिखित अजीब व्यवहार का कारण बन रहे थे। node-proxy, हालांकि, एक मॉड्यूल है जो proxies (NowJS के "जादुई नामस्थान" का मूल) बिना उन बग को सक्षम करता है। (कीड़े वी 8 के एक नए संस्करण में तय कर रहे हैं और साथ ही, लेकिन उस नोड के एक कस्टम निर्माण की आवश्यकता होगी।)

मैं सिर्फ यह पता लगाने नहीं कर सकता है विंडोज पर node-proxy निर्माण करने के लिए कैसे (यह एक .node ऐड-ऑन है, नहीं एक शुद्ध जावास्क्रिप्ट एक)। उपरोक्त ब्लॉग पोस्ट में उन्होंने संकलित मॉड्यूल वितरित किया, और सबकुछ अब एक आकर्षण की तरह काम करता है।

ठीक करने के लिए:

  • डाउनलोड the compiled module
  • node_modules फ़ोल्डर में फ़ोल्डर निकालें और now
  • लिए इसका नाम बदलना प्रॉक्सी झंडा

साथ नोड नहीं चला करो

संपादित करें: नोड 0। 7.0 वी 8 3.8.6 का उपयोग करता है जो इस मुद्दे को हल करता है। बस --harmony ध्वज के साथ चलाएं और node-proxy पर संदर्भ हटाएं।