2012-11-07 17 views
21

क्या किसी को किसी राज्य मशीन के किसी भी जावास्क्रिप्ट कार्यान्वयन के बारे में पता है? मेरा लक्ष्य एक राज्य मशीन कार्यान्वयन स्थापित करना है जो घटनाओं को राज्य संक्रमणों से जोड़ देगा। इसलिए, यदि कोई उपयोगकर्ता किसी बटन पर क्लिक करता है तो राज्य बदल जाएगा, और यह स्थिति उदाहरण के लिए वस्तुओं में कुछ मानों को परिभाषित कर सकती है।जावास्क्रिप्ट इवेंट स्टेट मशीन

मैं चाहता हूं कि यह एक राज्य मशीन हो क्योंकि केवल एक नियम जेसन फ़ाइल होगी जो कुछ घटनाओं को कहने पर विभिन्न वस्तुओं के मूल्यों को बदलने के लिए अनुमति देगा। क्योंकि यह फ़ाइल के भीतर संरचित किया जाएगा, मुझे लगता है कि उस जानकारी को राज्य मशीन ऑब्जेक्ट में पार्स करना आसान होगा।

+0

https://github.com/jakesgordon/javascript-state-machine हो सकता है कि आप देख रहे हैं। – Gael

उत्तर

26

js में एक परिमित राज्य मशीन के लिए दो मुख्य पुस्तकालयों के होते हैं: postal.js और amplify.js:

1/https://github.com/ifandelse/machina.js बहुत अच्छी तरह से प्रलेखित, उदाहरण, दो जावास्क्रिप्ट संदेश बस प्रदाताओं बॉक्स से बाहर का समर्थन करता है।

2/https://github.com/jakesgordon/javascript-state-machine "बुनियादी" उपयोगों के लिए सही, सरल और उपयोग करने में आसान।

3

https://github.com/steelbreeze/state.js पर एक नज़र डालने का प्रयास करें - यह यूएमएल 2 spec में वर्णित अनुसार अधिकांश राज्य मशीन सेमेन्टिक्स का समर्थन करता है जबकि अभी भी प्रदर्शनकारी है। अभी तक दस्तावेज़ीकरण के तरीके में बहुत कुछ नहीं है, लेकिन उदाहरणों और परीक्षणों को एक अच्छा संदर्भ प्रदान करना चाहिए।

+0

मैं उस पुस्तकालय का उपयोग कर रहा हूं और मैं इससे बहुत संतुष्ट हूं। हमने इसे हमारे चीज़मेल दृष्टिकोण में एकीकृत किया (https://github.com/SINTEF-9012/ThingML) – bmorin

1

जेएस-एफएसएम माइक्रो लाइब्रेरी के साथ इस पर मेरा चयन करें।

सुविधाएँ

  • राज्य आधारित FSM विवरण। एक राज्य और राज्य संक्रमण की एक सरणी से बना राज्य।
  • घटनाओं से संक्रमण। कई घटनाएं ऑर्ड घटनाओं को परिभाषित करती हैं।
  • शर्तों से संक्रमण। एक शर्त एक कुंजी है: मूल्य जोड़ी जो स्थिति ऑब्जेक्ट से मेल खाना चाहिए। एकाधिक कुंजी, मूल्य जोड़े परिभाषित एंडेड स्थितियों। कई स्थितियां ऑर्ड स्थितियों को परिभाषित करती हैं
  • प्रत्येक संक्रमण वैकल्पिक रूप से क्रियाओं या एकाधिक कार्रवाइयों को कॉल कर सकता है। क्रियाएं वैकल्पिक रूप से तर्क हो सकती हैं या इसके सदस्य बन सकती हैं।
  • राज्य मशीन को एक मौजूदा वस्तु या एक निर्माता के प्रोटोटाइप में मिश्रित (मिश्रण के रूप में) जोड़ा जा सकता है। इसके लिए एक विधि प्रदान की जाती है।
  • राज्य मशीन वैकल्पिक रूप से लॉग इन कर सकती है अगर इस पर कोई लॉग विधि मौजूद है या प्रदान की जाती है।
  • एएमडी और नोड मॉड्यूल समर्थित हैं।
  • क्विनीट के साथ यूनिट परीक्षण।

js-fsm github page.

2

आप jQuery के साथ बनाया गया पुस्तकालय है कि आप जो खोज रहे हैं और आप के लिए स्वचालित रूप से घटनाओं बाध्यकारी कर रहा है मिल जाएगा:

3

मेरी राज्य मशीन के लिए पदोन्नति का थोड़ा सा हिस्सा: राज्य प्रवाह मैंने अभी अपनी खुद की राज्य मशीन बनाई है क्योंकि मुझे कोई भी नहीं मिला जो मेरे लिए काफी आसान था।

प्रवाह को जेएस ऑब्जेक्ट के साथ परिभाषित किया गया है जहां संपत्ति राज्य का नाम है और मान निम्न गुणों के साथ एक और जेएस ऑब्जेक्ट है।

  • टाइप: प्रारंभ, समाप्ति या स्थिति (डिफ़ॉल्ट)।
  • क्रिया: इस पर सेट एक स्टेट इंस्टेंस ऑब्जेक्ट के साथ फ़ंक्शन को पहले से पंजीकृत या अन्य प्रवाह परिभाषा नाम भी दिया जा सकता है, यह एक उपप्रवाह है।
  • पर: संपत्ति घटना मिलान किया जा रहा है और मूल्य गोटो

सरल उदाहरण के बगल में राज्य है

var stateflow = require('stateflow'); 
var flow = new stateflow.StateFlow({ 
    a: { 
     type:'begin', 
     action: function(complete) { 
      // do something 
      complete('done');  
     }, 
     on: { 
      done:'b', 
      again:'a' 
     } 
    }, 
    b: { 
     type:'end', 
     action: function(complete) { 
      complete('finished'); 
     } 
    } 
}); 
flow.start(function(event) { 
    console.log('flow result:', event); 
}); 

Git https://github.com/philipdev/stateflow पर या NPM के माध्यम से

0

आप पा सकते हैं इसे देखें उपयोग की यह लाइब्रेरी:

https://www.npmjs.com/package/mistic

अस्वीकरण: मैं इसे बनाए रखता हूं।

4

मैं हाल ही में जे एस में एक राज्य मशीन कार्यान्वयन, जो निश्चित रूप से सबसे आसान कॉन्फ़िगर करने के लिए है बनाया गया है, इसके संक्रमण डीएसएल के लिए धन्यवाद:

transitions: [ 
    'next : intro > form > finish', 
    'back : intro < form   < error', 
    'error :   form >   error', 
    'restart : intro  < finish' 
] 

यह वास्तव में दोनों विन्यास और ईवेंट हैंडलर काम में लचीला है, आप जोड़ सकते हैं और कर सकते हैं Vue तरह रनटाइम पर राज्यों को निकालते हैं, रोक सकते हैं और संक्रमण को फिर से शुरू, घटनाओं की एक टन में हुक, jQuery के लिए सहायकों और प्रतिक्रियाशील चौखटे के साथ:

state-machine-demo

डॉक्स और डेम की एक पूरी मेजबान यहाँ ओएस:

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