2012-06-18 23 views
5

गणना क्षेत्रों के लिए निर्भरता विज्युअलाइजिंग वहाँ knockout.js में एक तरह से निर्धारित करने के लिएनॉकआउट

  • के मान (ko.observable या ko.computed) (उदाहरण/आश्रितों) और
  • किस तरह से एक दूसरे पर निर्भर है जो एचटीएमएल नोड्स (स्टार्टर्स के लिए टेक्स्ट बाध्यकारी) वर्तमान मान पर निर्भर करता है, इसलिए मैं उन्हें स्क्रीन पर हाइलाइट कर सकता हूं।

?

इसका मतलब है कि मैं एक तरह से की जरूरत है एक HTML नोड से, न कि केवल दृश्य मॉडल के लिए, जुड़ा हुआ ko.subscribable पर जाने के लिए ko.dataFor() करता है। यह भी असंभव प्रतीत होता है। कई संख्यात्मक मान है कि एक दूसरे पर व्यापार नियमों का एक सेट के अनुसार आधारित होते हैं -


मैं एक वेब अनुप्रयोग है कि एक स्प्रैडशीट की तरह काम करता है का निर्माण किया है। उनमें से कुछ की गणना की जाती है, उनमें से कुछ उपयोगकर्ता द्वारा प्रदान की जाती हैं।

फिलहाल मैं अपनी जेएस लाइब्रेरी का उपयोग कर रहा हूं जो सभी निर्भरता ट्रैकिंग और गतिशील स्क्रीन-अपडेटिंग करता है। यह काम करता है, लेकिन मैं इसे बहुमुखी प्रतिभा और लालित्य के लिए knockout.js के साथ स्वैप करना चाहता हूं।

नॉकआउट कहीं भी इस जानकारी का ट्रैक रखता है। मुझे इसे कैसे प्रयोग में लाना है?

 
    | A B C 
--+--------- 
1 | 4 1 5 
2 | 2 
3 | 3 8 
  • सेल B3 पर उपयोगकर्ता क्लिक करता है, मुझे पता करना चाहते हैं जब:


    उदाहरण के लिए, एक स्प्रेडशीट (एक HTML तालिका) है कि कुछ ही पूर्णांकों का सार कल्पना यह बी 1 और बी 2 पर निर्भर करता है और सी 3 इस पर निर्भर करता है।

  • जब उपयोगकर्ता सेल सी 3 पर क्लिक करता है, तो मैं यह जानना चाहता हूं कि यह ए 1, बी 1, सी 1, बी 2 और बी 3 पर निर्भर करता है।

उत्तर

7

मैंने plugin for Knockout (2.0+) लिखा है जिसका प्राथमिक उद्देश्य गणना किए गए अवलोकनों के लिए डुप्लिकेट अपडेट को समाप्त कर रहा है। लेकिन चूंकि प्लगइन ko.computed ऑब्जेक्ट को प्रतिस्थापित करता है, इसलिए मैंने अवलोकनों के लिए निर्भरताओं/आश्रितों की सूची प्राप्त करने की क्षमता भी जोड़ा है। प्रत्येक गणना वाली ऑब्जेक्ट में getDependencies विधि होती है जो अवलोकनों की एक सरणी देता है, और प्रत्येक अवलोकन/गणना वाले अवलोकन योग्य में getDependents विधि है जो गणना किए गए अवलोकनों की एक सरणी देता है।

+0

यह बहुत ही आशाजनक दिखता है। मुझे लगता है कि इसे बढ़ाने के लिए काफी आसान होगा ताकि यह उदाहरणों को भी ट्रैक कर सके। अब मैं कस्टम 'टेक्स्ट' बाइंडिंग के बारे में सोच रहा हूं जो स्वचालित रूप से कनेक्टेड HTML तत्वों को पंजीकृत करता है, इसलिए मुझे एक क्लिक हैंडलर में 'getDependents' को कॉल करने का मौका मिलता है, उदाहरण के लिए। – Tomalak

+0

मुझे नहीं पता कि "उदाहरण" से आपका क्या मतलब है। –

+0

एक्सेल शब्दावली: "आश्रित: मूल्य जो वर्तमान मूल्य पर निर्भर करते हैं।" "उदाहरण: मूल्य जो वर्तमान मान पर निर्भर करता है।" – Tomalak

4

यह एक बहुत ही रोचक सवाल है - और ऐसा लगता है कि उत्तर देने के लिए एक आसान नहीं है। मैंने नॉकआउट स्रोत को देखा है और ऐसा लगता है कि यह डेटा _subscriptionsToDependencies संपत्ति में संग्रहीत है, लेकिन ऐसा लगता है कि सार्वजनिक रूप से उजागर नहीं हुआ है।

मैंने नोट किया getDependenciesCount जो खुलासा हुआ है - इसे क्रिया में देखने के लिए this fiddle देखें।

मैं अभी भी इसकी जांच कर रहा हूं, लेकिन ऐसा लगता है कि इसे नॉकआउट के एक फोर्क की आवश्यकता हो सकती है जब तक कि हम अंतर्निहित अवलोकन में न आएं। लेकिन यहां तक ​​कि मैंने जो पाया है, वह आपको उपयोगी मिल सकता है:

डीबगर के माध्यम से इसे चलाते हुए, ऐसा लगता है कि रनटाइम पर नाइटआउट का छोटा संस्करण _subscriptionsToDependencies संपत्ति V पर पुनर्नामित करता है। रनटाइम पर getDependenciesCount संपत्ति का मान है: function(){return v.length}

मुझे आशा है कि इससे मदद मिलती है।

संपादित करें: इस प्रश्न पर आने वाले लोगों के लिए उत्तर की तलाश में, यह संस्करण 2 के रूप में KnockoutJS में संभव नहीं है।1

+0

आमतौर पर मैं अपने सरल प्रश्नों का उत्तर देता हूं। ;) - निर्भरता गणना को जानना बंद है लेकिन कोई सिगार नहीं है। इसके अलावा, यह मुझे उदाहरणों के बारे में कुछ भी नहीं बताता है। प्रश्न "कौन सा एचटीएमएल तत्व इस मूल्य को प्रदर्शित करता है" अतीत में एक अलग अवसर पर भी मेरे साथ हुआ है। यह जवाब देना उतना ही मुश्किल लगता है। – Tomalak