2012-11-07 40 views
21

Có ai biết về bất kỳ triển khai javascript nào của máy trạng thái không? Mục tiêu của tôi là thiết lập cài đặt máy trạng thái sẽ ràng buộc các sự kiện với các trạng thái chuyển tiếp. Vì vậy, nếu người dùng nhấp vào một nút thì trạng thái sẽ được thay đổi và trạng thái này có thể xác định các giá trị nhất định trong các đối tượng cần thay đổi chẳng hạn.Máy trạng thái sự kiện JavaScript

Tôi muốn đây là máy trạng thái đơn giản vì sẽ có tệp json quy tắc sẽ cho phép đọc chính tả giá trị thay đổi của các đối tượng khác nhau khi các sự kiện nhất định được gọi. Bởi vì điều này sẽ được cấu trúc bên trong tệp, tôi nghĩ sẽ dễ dàng phân tích cú pháp thông tin đó thành một đối tượng máy trạng thái.

+0

https://github.com/jakesgordon/javascript-state-machine thể là bạn đang tìm kiếm. – Gael

Trả lời

3

Hãy thử xem https://github.com/steelbreeze/state.js - nó hỗ trợ nhiều ngữ nghĩa máy nhà nước như được mô tả trong thông số UML 2 trong khi vẫn đang thực hiện. Hiện chưa có nhiều tài liệu, nhưng các ví dụ và bài kiểm tra phải cung cấp một tham chiếu tốt.

+0

Tôi đã sử dụng thư viện đó và tôi rất hài lòng với nó. Chúng tôi tích hợp nó vào cách tiếp cận thingml của chúng tôi (https://github.com/SINTEF-9012/ThingML) – bmorin

1

Lựa chọn của tôi về điều này với thư viện vi js-fsm.

Tính năng

  • Nhà nước Mô tả FSM dựa. Một trạng thái gồm một và một loạt các trạng thái chuyển tiếp.
  • Chuyển tiếp từ các sự kiện. Nhiều sự kiện xác định các sự kiện ORED.
  • Chuyển tiếp từ các điều kiện. Điều kiện là cặp khóa: giá trị phải khớp với đối tượng điều kiện. Nhiều cặp khóa, giá trị được xác định điều kiện ANDed. Nhiều điều kiện xác định các điều kiện ORED
  • Mỗi chuyển đổi có thể tùy chọn gọi hành động hoặc nhiều hành động. Hành động có thể tùy chọn có đối số hoặc là thành viên của đối tượng này.
  • Máy nhà nước có thể được trộn lẫn (như một mixin) với một đối tượng hiện có hoặc một nguyên mẫu của nhà xây dựng. Một phương pháp cho điều này được cung cấp.
  • Máy nhà nước có thể tùy ý ghi nhật ký nếu phương thức đăng nhập tồn tại trên phương thức này hoặc được cung cấp.
  • Mô-đun AMD và Nút được hỗ trợ.
  • Kiểm tra đơn vị với QUnit.

js-fsm github page.

3

Ít quảng cáo cho máy tiểu bang của tôi: stateflow Tôi vừa tạo ra máy nhà nước của riêng mình bởi vì tôi không tìm thấy cái nào đủ đơn giản cho tôi.

luồng được xác định với đối tượng js trong đó thuộc tính là tên tiểu bang và giá trị là đối tượng j khác với các thuộc tính sau.

  • loại: bắt đầu, kết thúc hoặc trạng thái (mặc định).
  • hành động: hoạt động với đối tượng thể hiện trạng thái được đặt thành này, cũng có thể được đặt tên là hành động đã đăng ký trước đó hoặc định nghĩa luồng khác trong trường hợp này, đó là luồng phụ.
  • về: tài sản là để được xuất hiện sự kiện và giá trị là trạng thái bên cạnh goto

Ví dụ đơn giản

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); 
}); 

Check it out trên git https://github.com/philipdev/stateflow hoặc qua NPM

4

thời gian gần đây tôi đã xây dựng một thực hiện máy nhà nước trong JS, mà chắc chắn là dễ nhất để cấu hình, nhờ DSL quá trình chuyển đổi:

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

Nó thực sự linh hoạt trong cả hai nhiệm vụ cấu hình và xử lý sự kiện, bạn có thể thêm và loại bỏ các quốc gia trong thời gian chạy, tạm dừng và tiếp tục chuyển tiếp, móc vào một tấn của các sự kiện, với những người giúp đỡ cho jQuery và các khuôn khổ phản ứng như Vue:

state-machine-demo

Docs và một loạt toàn bộ dem os đây:

Các vấn đề liên quan