2017-02-21 11 views
7

मैं एक साधारण ड्राइंग प्रोग्राम के साथ क्लोजरस्क्रिप्ट में अभिकर्मक के साथ पकड़ने की कोशिश कर रहा हूं।क्लोजरस्क्रिप्ट/अभिकर्मक/रीगी में माउस को ट्रैक करना?

मैं Reagi के साथ एक प्रिंसिपल "एफआरपी" प्रेरित शैली में माउस की स्थिति तक पहुंचने का उदाहरण ढूंढ रहा हूं।

[:p [:onmousemove (fn (evt) ...)]] 

डोम के एक तत्व के लिए कोई हैंडलर संलग्न करने के लिए:

विभिन्न अभिकर्मक उदाहरण में मैं चीजें हैं जो इस तरह दिखेगा देख सकते हैं।

और एक Reagi "" व्यवहार बनाने के लिए मैं कुछ इस तरह लिखना चाहते हैं:

(def mouse-positions (r/behavior (...))) 

लेकिन यह कैसे मैं इन दो ताकि कोई हैंडलर मैं एक डोम तत्व को जोड़ने के एक Reagi व्यवहार खिलाती है कि गठबंधन करते हैं?

दूसरा, जैसा कि मैं अभिकर्मक का उपयोग कर रहा हूं, मुझे उम्मीद है कि इन डोम नोड्स को नियमित रूप से पुनर्निर्मित किया जाएगा। संभवतः मुझे ईवेंट-हैंडलर को रीगी स्ट्रीम में भी पुनर्जीवित रखना होगा। मैं यह कैसे सुनिश्चित करूं?

चियर्स

उत्तर

0

मुझे आश्चर्य है अगर Reagi की घटना धारा बेहतर अनुकूल होगा। कुछ के साथ कुछ:

(defonce mouse-events (r/events {:x 0 :y 0})) 

(defn home-page [] 
    [:div {:onMouseMove (fn [event] 
         (r/deliver mouse-events {:x (.-clientX event) 
               :y (.-clientY event)}))}]) 

फिर, आप ईवेंट स्ट्रीम को @mouse-events से हटा सकते हैं। आपको इवेंट स्ट्रीम पर पुनर्विचार करने की चिंता करने की आवश्यकता नहीं है क्योंकि इसमें इसका संदर्भ है।

हालांकि, ध्यान रखें कि एक रीगी स्ट्रीम में मूल्य को धक्का देने से अभिकर्मक नोड को फिर से प्रस्तुत करने का कारण नहीं बनता है जो इसे सीधे संदर्भित करता है। इसके लिए आपको कुछ प्रकार के अभिकर्मक परमाणु की आवश्यकता होगी।

आप एक ड्राइंग अनुप्रयोग बना रहे हैं, मुझे लगता है अपने राज्य/परमाणु कहीं और संग्रहीत किया जाएगा, और आप swap! या reset! तब होती है प्रस्तुत करना होता है।

साथ ही, ध्यान दें कि दोनों व्यवहार और घटनाएं केवल नए मूल्य के संदर्भ को पकड़ती हैं, जो ड्राइंग एप्लिकेशन के लिए आदर्श नहीं हो सकती है। रीगी के buffer भी हैं जो इससे मदद कर सकते हैं।

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