2012-06-25 21 views
8

Tôi đang cố gắng hiểu liệu các quốc gia trong Ember.js chỉ được thiết kế/giả định được định nghĩa trong trình quản lý tuyến đường hay không và liệu các tuyến đường có thể tách rời với Ember hay không. Khá nhiều tất cả các guides Tôi đã nhìn thấy dường như giả sử bạn muốn các tiểu bang và các tuyến đường khớp chính xác.Các quốc gia trong Ember.js mà không sử dụng tuyến đường?

Tôi muốn tạo các trạng thái không phụ thuộc vào tuyến đường, nhưng chỉ ở trạng thái của ứng dụng. Ví dụ: trong ứng dụng email, tôi có thể có trạng thái "userHasSpecifiedRecipient". Chỉ khi trạng thái này là đúng, tôi có thể bật hộp thông báo của biểu mẫu. Nhưng rõ ràng là tôi không muốn url là:

myEmailClient.com#composingMessage_userHasSpecifiedRecipient_userIs..., vv

Có ví dụ về điều này?

Câu hỏi thứ hai: Tôi có thể kết hợp các trạng thái được kết hợp với các tuyến đường và trạng thái không?

Cuối cùng: Tôi thấy một số lời khuyên khuyên mọi người nên sử dụng addon sproutcore-statechart của Ember nếu họ muốn những thứ như trạng thái đồng thời. Điều này vẫn đúng?

Trả lời

4

Trong EmberJS, có một thi hành một Finite State Machine, Ember.StateManager. StateManager sử dụng Ember.State để biểu diễn các trạng thái trong máy trạng thái, có các hàm enterexit, v.v. Hãy xem Class: Ember.StateManager.

Ví dụ sử dụng StateManager, Ember.View sử dụng nó để quản lý các trạng thái khác nhau của Chế độ xem. Một ví dụ khác là Ember-Data, sử dụng trình quản lý trạng thái để theo dõi các trạng thái khác nhau mà một bản ghi có thể có.

Để làm cho cuộc sống dễ dàng hơn và tránh mã bản mẫu, có một triển khai Router trong phiên bản mới nhất của EmberJS, vẫn còn rất nhiều công việc đang tiến hành, với các bản cập nhật một hoặc hai lần một tuần. Bạn có thể tìm thông tin mới nhất trên số GitHub downloads.

Ember.Router là lớp con của Ember.StateManager chịu trách nhiệm cung cấp phát hiện trạng thái ứng dụng dựa trên URL. Ví dụ Ember.Router của một ứng dụng phát hiện URL trình duyệt tại thời gian tải ứng dụng và cố gắng khớp nó với một trạng thái ứng dụng cụ thể. Ngoài ra, bộ định tuyến sẽ cập nhật URL để phản ánh thay đổi trạng thái của ứng dụng theo thời gian. (JSDoc in Ember source)

Thêm vào đó, vì Ember.Router kéo dài Ember.StateManagerEmber.Route kéo dài Ember.State, đây là những hoán đổi cho nhau. Trong thực tế, chỉ một ngày, một sự hỗ trợ được thực hiện để hỗ trợ hỗn hợp các tiểu bang và các tuyến đường, xem Support basic States inside of Routes.

2

Bạn có thể thay đổi triển khai vị trí bộ định tuyến thành 'không' để tắt tính năng này. các phương thức khác là 'băm' hoặc 'lịch sử' (với hiện tại ember-latest.js trên github).

https://github.com/joliss/ember.js/blob/50aff86ef5b6847108bc8c32364171815c230d36/packages/ember-application/lib/system/location.js

App.Router = Ember.Router.extend({ 
    location : Ember.Location.create({ 
     implementation : 'none' 
    }) 
}); 
+1

Tôi cũng vừa tìm thấy một [ví dụ gần đây bởi Yehuda] (https://gist.github.com/2679013) sử dụng Ember.StateManager thay vì Ember.Router. Sau đó là những gì tài liệu sử dụng. Sự khác nhau giữa chúng là gì? –

+0

Ngoài ra, với câu hỏi thứ hai của tôi ở trên, nếu tôi muốn có một số tập con của các trạng thái được kết hợp với các tuyến đường thì sao? Trong trường hợp đó tôi sẽ không muốn vị trí bị vô hiệu hóa hoàn toàn. (Tuy nhiên, nếu sự pha trộn này khó, nó không quan trọng và tôi có thể thực hiện các tuyến đường theo một cách khác.) –

+0

Ồ, hay tôi có thể có hai StateManagers khác nhau, một với các địa điểm và một không có? –

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