में स्थानीय गतिशील निर्दिष्ट करें मैं विभिन्न तरीकों से Grid
गतिशील रूप से विशिष्ट भागों को अपडेट करना चाहता हूं। निम्नलिखित खिलौने उदाहरण पर विचार करें: मेरे पास दो पंक्तियां हैं: एक को एक-एक-एक (, बी, सी) अपडेट किया जाना चाहिए, क्योंकि ये प्रतीक विभिन्न ट्रिगर्स पर निर्भर करते हैं; दूसरी पंक्ति एक एकल ट्रिगर पर निर्भर करती है (शो) जो कुछ डेटा प्रदर्शित/छिपाने की अनुमति देती है। कुछ कारणों के लिएग्रिड
Checkbox[Dynamic[show]]
test = {0, 0};
Dynamic[Grid[{{[email protected], [email protected], [email protected]},
If[show, Prepend[test, "test:"], {}]}, Frame -> All],
TrackedSymbols :> {show}]
हालांकि:
अब मुझे पता है कि मैं Dynamic
में पूरी Grid
संरचना लपेट कर सकते हैं, और यहां तक कि जो प्रतीकों ट्रैक करने के लिए निर्दिष्ट करते हैं, इस प्रकार इस उदाहरण करता है जो मैं चाहता मैं स्थानीय रूप से निर्दिष्ट Dynamic
चाहता हूं, जो केवल Grid
की दूसरी पंक्ति पर लागू होता है।
जो लोग सोच रहे हैं कि क्या धर्मभ्रष्ट स्थिति यह होगा के लिए, बस निम्नलिखित कल्पना: show
a
, b
या c
में से किसी में प्रयोग किया जाता है, और इन मैं नहीं चाहता हूँ अद्यतन करने के लिए जब show
बदल रहा है, उनके परिवर्तन पर निर्भर हैं अन्य ट्रिगर्स पहली पंक्ति के प्रतीकों से show
को क्यों न हटाएं? कल्पना कीजिए, मैं नहीं कर सकता, show
a
, b
या c
में उपयोग किए जाने वाले फ़ंक्शन में मौजूद है, और यह फ़ंक्शन मैं आसानी से नहीं पहुंच सकता।
Dynamic
में
If
का पहला तर्क लपेटकर यहाँ मदद नहीं करेगा के
, Grid
रूप में खुद को या अपने कोशिकाओं के किसी भी गतिशील नहीं हो जाएगा:
Grid[{
{[email protected], [email protected], [email protected]},
If[[email protected], Prepend[test, "test:"], {}]
}, Frame -> All]
इसके अलावा, Dynamic
बनाता है में एक पंक्ति लपेटकर भी पंक्ति, अवैध रूप में यह सिर List
अब और नहीं है:
Grid[{
{[email protected], [email protected], [email protected]},
[email protected][show, Prepend[test, "test:"], {}]
}, Frame -> All]
मानचित्रण Dynamic
पंक्ति पर क्योंकि या तोसे काम नहीं करतागतिशील रूप से अद्यतन किया जाता है नहीं:
Grid[{
{[email protected], [email protected], [email protected]},
Dynamic /@ If[show, Prepend[test, "test:"], {}]
}, Frame -> All]
इसके अलावा, लपेटकर Dynamic[If[...]]
सूची सदस्यों के आसपास काम करते हैं, लेकिन अब मैं अगर वहाँ के बजाय If
3 बार सिर्फ 1.
Grid[{
{[email protected], [email protected], [email protected]},
Dynamic[If[show, #, ""]] & /@ Prepend[test, "test:"]
}, Frame -> All]
चाहेंगे मूल्यांकन करने के लिए पता करने के लिए है एक पंक्ति पर Dynamic
रैपर को स्थानीय रूप से लागू करके इस विशेष समस्या को दूर करने के लिए कोई समाधान।
तो तुम एक समाधान जहां 1. दो पंक्तियों 2. दोनों पंक्तियों '3. show' लेकिन केवल दूसरी पंक्ति पर निर्भर अद्यतन किया जाना चाहिए जब' शो के साथ एक ग्रिड वहाँ की जरूरत है 'परिवर्तन क्या इसे मैंने ठीक तरह से लिया? – Szabolcs
क्या आप समझा सकते हैं कि 'अगर' अवांछनीय के तीन मूल्यांकन क्यों हैं? क्या 'if' महंगा में परीक्षण है? हम किसी ऐसे समय के साथ आ सकते हैं जो परीक्षण का मूल्यांकन एक ही समय में करता है और परिणाम को एक चर में संग्रहीत करता है जो फिर तीन 'if's को नियंत्रित करता है। मेरा मानना है कि अगर आप पूरी चीज लपेटते हैं तो आप 'ए, बी, सी' को अपडेट करने से नहीं बच सकते हैं, लेकिन मुझे यकीन नहीं है! – Szabolcs
हां, आप आवश्यकताओं के बारे में सही हैं, और नहीं, ज़ाहिर है कि अगर परीक्षण बहुत महंगा नहीं है, और फिलहाल कोड उस तरह चलता है (मैपिंग अगर)। और भी समस्याग्रस्त हालांकि एक और चीज है, जिसे मैं अभी ठीक करने की कोशिश कर रहा हूं। –