2016-05-06 5 views
11

के साथ ठीक से नहीं चलती है मुझे अपने प्रतिक्रिया पृष्ठों पर टिप्पणी करने के लिए टिप्पणी गिनती स्क्रिप्ट प्राप्त करने में एक समय का नरक रहा है। शुरू करने के लिए, वे <body> टैग के नीचे, मेरी index.html फ़ाइल में स्क्रिप्ट डालने की सलाह देते हैं। मैंने यह किया है, और कोई परिणाम नहीं देखा।Disqus's count.js स्क्रिप्ट index.html में feedback.js वेबसाइट

<body> 
 
    <div id="app"> 
 
    </div> 
 
    <script src="static/index.js"></script> 
 
    <script id="dsq-count-scr" src="//mtg-hunter.disqus.com/count.js" async></script> 
 
    </body>

मैं एक index.js फ़ाइल जो घटक सहित अपने सभी घटकों, लोड कर रहा है है (यह ResultComponent.js कॉल) जो मैं टिप्पणी गिनती में <span> टैग करना चाहते हैं। <span> टैग खुद को इस तरह दिखेगा:

var commentCount = <span className="disqus-comment-count" onClick={function() {this.setState({currentSelectedTab: 4})}.bind(this)} 
 
\t \t \t data-disqus-identifier={idGoesHere} 
 
\t \t \t style={{fontVariant:"small-caps"}}>0 Comments</span>

अभी तक, इतना आसान है। मैं किसी भी <a> टैग का उपयोग नहीं कर रहा हूं इसलिए मुझे कहीं भी #disqus_thread नहीं मिला है। जब मैं अपना पेज लोड करता हूं, तो मुझे उम्मीद है कि मेरी टिप्पणी बढ़ने की गिनती होगी, लेकिन ऐसी कोई किस्मत नहीं है। इसका परीक्षण करने के लिए, मैंने कच्ची गिनती, unaltered, कच्चे count.js स्क्रिप्ट से कॉपी किया (जो located here है)। इसके बाद मैंने इसे सीधे क्रोम के devtools कंसोल में चिपकाया, और यह काम किया; सभी प्रासंगिक टिप्पणी काउंटर उनके उचित मूल्यों पर गए।

संपादित करें: एक दिन बाद, अधिक प्रोडिंग; मैंने disqus.com डोमेन में वास्तविक कोड में ब्रेकपॉइंट्स जोड़े। स्क्रिप्ट टैग में स्क्रिप्ट सही समय पर ठीक चल रही है, सिवाय इसके कि यह गायब चर के अलावा जब यह displayCount() फ़ंक्शन में प्रवेश करती है। ऐसे कई चर हैं जिन्हें केवल मान नहीं दिए जाते हैं, इसलिए यह टिप्पणी संख्याओं में शामिल नहीं हो सकता है और यह हमेशा विफल हो जाता है। मुझे नहीं पता कि यह मेरे index.html के भीतर से क्यों कॉल किया जाता है, लेकिन जब मैं कच्चे count.js कोड को अपने कंसोल में पेस्ट नहीं करता हूं और वहां करता हूं। कोई विचार क्यों नहीं।

e.displayCount = function(b) { 
 
     for (var c, a, d, e = b.counts, b = b.text.comments; c = e.shift();) 
 
      if (a = j[c.id]) { 
 
       switch (c.comments) { 
 
       case 0: 
 
        d = b.zero; 
 
        break; 
 
       case 1: 
 
        d = b.one; 
 
        break; 
 
       default: 
 
        d = b.multiple 
 
       } 
 
       c = d.replace("{num}", c.comments); 
 
       a = a.elements; 
 
       for (d = a.length - 1; d >= 0; d--) 
 
        a[d].innerHTML = c 
 
      } 
 
    } 
 
    ;
जब यह ठीक से कंसोल में स्क्रिप्ट चलाता है, मेरी चिपकाने से, j चर परिभाषित किया गया है:

स्पष्ट करने के लिए, इस प्रासंगिक कोड है। जब index.html से कॉल किया जाता है, j अपरिभाषित है, तो यह पहले if पर विफल रहता है। कॉलिंग यूआरएल दोनों परिस्थितियों में बिल्कुल समान है: http://mtg-hunter.disqus.com/count-data.js?1=19767&1=235597&1=373322&1=382310&1=382841&1=382866&1=383023&1=397543&1=397682&1=398434। यह b पैरामीटर देता है, और जब मैं स्थानीय रूप से स्क्रिप्ट चलाता हूं तो यह j को परिभाषित करता है ताकि अगर असाइनमेंट ऑपरेटर काम कर सके (जो इसे करने का वास्तव में अजीब तरीका है, लेकिन ठीक है)।

संपादित फिर से: मैं कहना चाहिए कि मैं इस एक स्थानीय परीक्षण सर्वर (localhost:3000), यकीन नहीं करता है, तो यह है कि एक अंतर नहीं करता है या पर कर रहा हूँ?

और संपादित करें: मेरे उपरोक्त प्रश्न का उत्तर 'नहीं' हो गया है। मैंने अपने सर्वर पर अपना कोड अपलोड किया और उत्पादन साइट ने यह भी दिखाया कि लिपि ठीक से नहीं चल रही थी। यह बेतुका है ... मैं अब तक विचारों से बाहर हूं।

फिर से संपादित करें: आंशिक सफलता ... मैंने इस कोड को परिणाम कॉम्पोनेंट में जोड़ा।js:

componentDidMount() { 
 
    \t DISQUSWIDGETS.getCount(); 
 
    }, 
 

 
    componentDidUpdate() { 
 
    \t DISQUSWIDGETS.getCount(); 
 
    },

अच्छी खबर है; जब मैं पृष्ठ को रीफ्रेश करता हूं, तो यह सही टिप्पणी गिनती दिखाता है! हुर्रे! खराब समाचार: जब मैं पृष्ठ के उन हिस्सों को बदलता हूं जो परिणाम घटक को छिपाते हैं, और फिर इसे वापस लाते हैं (componentDidUpdate ट्रिगर करते हैं), DISQUSWIDGETS.getCount() कॉल काम नहीं करता है। इसे अभी भी बुलाया जाता है, लेकिन स्क्रिप्ट का displayCount हिस्सा कभी नहीं करता है, इसलिए डीओएम को नई जानकारी के साथ कभी अपडेट नहीं किया जाता है। यह अभी भी वही तरीके से बुलाए जाने के बावजूद इस भयानक लिपि का एक और उदाहरण है ...

+0

ऐसा लगता है कि रिस्पॉज आपके अपेक्षित संदर्भ में कुछ कर रहा है। क्या आप 'displayCount' को समायोजित कर सकते हैं जैसे कि आप अतिरिक्त तर्क के रूप में 'j' पास कर सकते हैं? – Ouroborus

+0

नहीं, यह एक ऐसी स्क्रिप्ट है जो Disqus द्वारा लोड/बनाई गई है और यह mtg-hunter.disqus.com/count.js पर बैठती है। – IronWaffleMan

+0

सबसे अच्छा समाधान नहीं है, ऐसा लगता है कि आप कोड को अपडेट कर सकते हैं। 'Count.js' लोड होने के बाद, अपने स्वाद के लिए अधिक फ़ंक्शन में' DISQUSWIDGETS.displayCount' असाइन करें। या यहां तक ​​कि 'count.js' की स्थानीय प्रतिलिपि बनाएं और उसे संशोधित करें और उससे लिंक करें। कम से कम, यह डिबगिंग के साथ मदद कर सकता है। – Ouroborus

उत्तर

3

ठीक है, Disqus में समर्थन लड़के के साथ बहुत पीछे और बाद में मुझे अंत में एक जवाब मिला; मैं क़रीब था। समाधान है:

componentDidMount() { 
 
    \t DISQUSWIDGETS.getCount({reset:true}); 
 
    }, 
 

 
    componentDidUpdate() { 
 
    \t DISQUSWIDGETS.getCount({reset:true}); 
 
    },

बाहर कर देता है मैं reset:true परम, जो getCount वास्तव में कुछ करने के लिए कोड का एक हिस्सा सक्षम पारित करने के लिए किया था। मुझे लगता है कि मैं कोड से बाहर निकल सकता था, लेकिन मैं इसे खोने के लिए तीव्र रूप से छोटा स्वरूपण (क्रोम देव उपकरण के साथ भी इसे प्रसन्न करने में मदद करता हूं) को दोषी ठहराता हूं। यह टिप्पणी काउंटर को जोड़ने के लिए उनके ज्ञान आधार लेख में भी था, लेकिन मैंने इसके संदर्भ को याद किया (और 'तथ्य' द्वारा अवशोषित हो गया कि 'यह स्पष्ट रूप से स्क्रिप्ट नहीं होना चाहिए, स्पष्ट रूप से')।

और इसलिए कोडिंग के मेरे सबसे निराशाजनक कुछ दिनों में से एक समाप्त होता है। और एक उपयोगी सबक ... पीछे हटें और हर बार बड़ी तस्वीर देखें, क्योंकि जवाब आपको चेहरे पर देख रहा है।

संबंधित मुद्दे