knockout.js - How do I keep child div from being bound by Knockout JS using foreach and SignalR -
मैंने निम्नलिखित ब्लॉग पोस्ट का उपयोग करके एक फेसबुक शैली टिप्पणी प्रणाली बनाई है:
मैंने कार्यक्षमता बढ़ा दी है छिपी हुई सीएसएस वर्ग के नाम को जोड़ने / हटाने से टिप्पणी डिज़ाइन को टॉगल करने का एक तरीका जोड़ना अगर मेरे पास ब्राउज़र खोलने का केवल एक उदाहरण है तो यह अच्छी तरह से काम करता है हालांकि, जब मैं एक दूसरा ब्राउज़र खोलता हूं, तो उस ब्राउज़र को लोड करने से दोनों ब्राउज़र उदाहरणों को उनके डिफ़ॉल्ट "छिपा हुआ" वर्ग में टिप्पणी अनुभाग रीसेट करता है। क्या किसी का सुझाव है कि टिप्पणी सेक्शन डिवेल को नॉकआउट बाइनिंग से कैसे बांटना है ताकि वह डिवा क्लाइंट पक्ष को नियंत्रित कर सके और नॉकआउट के माध्यम से? यह मेरा संक्षिप्त कोड है जिस पर ऊपर वर्णित ब्लॉग पोस्ट पर आधारित है:
HTML: ... & lt; ul id = "msgHolder" class = "post-ul" data-bind = "foreach: पदों '& gt; & Lt; li वर्ग = "पोस्टहोल्डर पोस्ट ली" & gt; & Lt; div class = "postfooter" & gt; ... & lt; a class = "togglecommentSection" href = "#" डेटा-बाइंड = "क्लिक करें: टॉगल करेंटमेंट, दृश्यः पोस्ट कॉममेंट्स ()। लंबाई & gt; 0" & gt; टिप्पणी देखें (लि) & lt; / a & gt; & Lt; div class = "टिप्पणी छिपा हुआ" & gt; & Lt; ul class = "post-ul" डेटा-बाइंड = "foreach: पोस्ट कॉममेंट्स" & gt; ... & lt; / ul & gt; & Lt; / div & gt; & Lt; / div & gt; & Lt; / li & gt; & Lt; / ul & gt; ... स्क्रीप्ट: फ़ंक्शन पोस्ट (डेटा, हब, स्वामी) {... self.toggleCommentSection = function (आइटम, ईवेंट) {if ($ (event.target) .next ('। टिप्पणी का पता')। (': दृश्य ')) {$ (event.target) .next (' टिप्पणी टिप्पणी ')। AddClass ("छुपा"); $ (Event.target) .html ("टिप्पणी देखें"); } और {$ (event.target) .next ('टिप्पणी टिप्पणी')। RemoveClass ("छुपा"); $ (Event.target) .html ("टिप्पणी छिपाएं"); }}}}
समस्या यह नहीं है कि यह अभी भी knockoutjs के लिए बाध्य है समस्या यह है कि यदि कोई व्यक्ति कनेक्ट हो, तो सभी पदों को फिर से लोड किया जाता है।
PostHub से:
// GET api / WallPost सार्वजनिक शून्य GetPosts () {.. ग्राहक। All.loadPosts (ret); }
मुझे लगता है कि यह ग्राहक होना चाहिए। Caller.loadPosts (ret)
। लेकिन इसके अलावा, इसका मतलब यह है कि अगर किसी को GetPosts ()
कॉल करता है, तो फ़ंक्शन लोडपोस्ट्स (डेटा)
सभी ग्राहकों पर लागू होता है:
Self.hub.client.loadPosts = फ़ंक्शन (डेटा) {var मैप किए गए पोस्ट्स = $ .मैप (डेटा, फ़ंक्शन (आइटम) {नया पोस्ट (आइटम, self.hub);}); self.posts (mappedPosts); }
यह नये पदों के साथ पदों को बदल देगा। इसके बदले में और
ऐसा होने से रोकने के लिए, छुपा राज्य को याद रखने के लिए आपको नॉकआउटजे का उपयोग भी करना चाहिए:
अपने क्लाइंट साइड पर एक संपत्ति जोड़ें पोस्ट: < / P>
self.commentsHidden = ko.observable (सत्य);
HTML:
& lt; ul आईडी = "msgHolder" class = "post-ul" डेटा-बाइंड = "विदेशी भाषा: पद" & gt; & Lt; li वर्ग = "पोस्टहोल्डर पोस्ट ली" & gt; & Lt; div class = "postfooter" & gt; ... & lt; a class = "togglecommentSection" href = "#" डेटा-बाइंड = "क्लिक करें: टॉगलटिप्पणसंशोधन, दृश्यमान: पोस्टकॉममेंट्स ()। लंबाई & gt; 0, पाठ: टिप्पणियांहैड ()? 'टिप्पणी देखें': 'टिप्पणी छिपाएं' '' & gt; & lt; / a & gt; & Lt; div class = "commentSection" डेटा-बाइंड = "सीएसएस: {छिपा हुआ: टिप्पणियांअहित}" & gt; & Lt; ul class = "post-ul" डेटा-बाइंड = "foreach: पोस्ट कॉममेंट्स" & gt; ... & lt; / ul & gt; & Lt; / div & gt; & Lt; / div & gt; & Lt; / li & gt; & Lt; / ul & gt;
टॉगल टिप्पणीविवरण:
self.toggleCommentSection = function () {self.commentsHidden (! Self.commentsHidden ()); }
नॉकआउट की दुनिया में आपका स्वागत है!
Comments
Post a Comment