2012-12-20 36 views
5

Tôi vẫn đang học Extjs và mvc vì vậy tôi có một câu hỏi thiết kế mà tôi chắc chắn ai đó có thể trả lời cho tôi. Câu hỏi của tôi là:Extjs4 ý tưởng thiết kế mvc

Tôi có 2 bộ điều khiển xử lý hai chế độ xem khác nhau. Một trong hai bộ điều khiển được gọi để hiển thị chế độ xem chính xác dựa trên loại người dùng. Vì vậy, trong trường hợp của tôi nếu người dùng là quản trị viên thì họ sẽ có chế độ xem quản trị dựa trên thông tin đăng nhập và nếu người đó là người dùng chuẩn thì họ sẽ có chế độ xem chuẩn. Nếu logic quyết định được đặt trong app.js hay nên có một bộ điều khiển khác quyết định bộ điều khiển nào cần gọi?

Một cách Tôi đang nghĩ về:

điều khiển cho quản trị

Ext.define('adminController', { 

     // handles admin 
}) 

điều khiển cho người dùng chuẩn

Ext.define('standardController', { 

     // handles standard 
}) 

App.js

Ext.application({ 
    name: 'MTK', 
    autoCreateViewport: true, 

    if(admin) { 
     controllers: ['adminController'] 
    } 
    else(std){ 
     controllers: ['standardController'] 
    } 
}); 

Một ý tưởng:

điều khiển cho quản trị

Ext.define('adminController', { 

    // handles admin 
}) 

điều khiển cho người dùng chuẩn

Ext.define('standardController', { 

    // handles standard 
}) 

điều khiển chính

Ext.define('mainController', { 

    if(admin){ 
     call adminController 
    } 
    else(std){ 
     call standardController 
    } 
}) 

Trả lời

2

tôi sẽ không làm (hoặc ít nhất quá nhiều của nó) này trong t ông lối vào. Tôi đoán bạn sẽ có thể biết vai trò người dùng khi người dùng đăng nhập như vậy.

Đối với tôi, tôi thực hiện theo cách này, nhưng tôi phải nói rằng tôi có ACL phức tạp hơn nhiều và tôi sẽ không làm phiền người dùng với mô-đun hoặc chế độ xem nơi phụ trợ sẽ từ chối mọi quyền truy cập.

Tôi đang sử dụng hai phương pháp sau đây:

  • tải lại/chuyển hướng đến quan điểm ứng dụng (backend!) Sau khi đăng nhập thành công. Các máy chủ biết những gì để tay trở lại bởi user session
  • trở lại một cấu hình sau một phù thủy đăng nhập thành công chứa thông tin gì để yêu cầu tiếp theo (điều này có thể chỉ là một bộ điều khiển hoặc một số lớp hơn)

Cả hai cách tiếp cận kết quả trong ít mã hơn, gỡ lỗi nhanh hơn và dễ dàng hơn để tải xuống

Tôi hy vọng điều này chỉ cho bạn đúng hướng.

+0

Tôi đã có chuyển hướng đăng nhập tại chỗ. Tôi đoán tôi nên đã đề cập rằng đã có nhưng dù sao, tôi có một phiên mà tôi có được thông tin ldap của người dùng. Vì vậy, tôi đoán tôi có thể sử dụng bộ điều khiển khác để xác định chế độ xem nào sẽ hiển thị. – reagan

+0

@rob Để chắc chắn bạn có thể nhưng tôi sẽ không nằm trong nhiều lần giải mã liên quan đến vai trò người dùng hoặc truy cập vào bộ điều khiển giao diện người dùng. Bạn nên giải quyết chúng tại serverside và như tôi đã nói chuyển hướng sau khi đăng nhập một view được thiết lập cho mỗi role hoặc trả về thông tin rolenased cho login-cmp gì cần tải tiếp theo – sra

+0

cảm ơn sự giúp đỡ của bạn – reagan

2

Câu hỏi thú vị, tôi đồng ý với @sra rằng đó không phải là cách phù hợp để thực hiện điều này thông qua logic phía khách hàng mặc dù nó không nói rằng nó sẽ không hoạt động.

Trong một ứng dụng tôi đã làm việc trên chúng tôi đã sử dụng phương pháp xác định tất cả các bộ điều khiển có thể hoặc không thể được gọi trong bộ điều khiển kiểu 'nav'.Đây là cái duy nhất chúng tôi trực tiếp khởi tạo và sau đó dựa trên các giá trị mặc định đầu tiên và sau đó, các tương tác trực tiếp mà chúng tôi đã chọn để hiển thị các bộ điều khiển và chế độ xem thích hợp giống như phương pháp thứ hai @sra đề xuất.

Tôi cho rằng cách tiếp cận đầu tiên của sra là hợp lý, nhưng vấn đề xuất hiện khi bạn có thể có một chế độ xem với tư cách quản trị viên có thể chỉnh sửa và người dùng chỉ nên đọc. Bạn không muốn viết hai quan điểm trong tình huống này. Một điều tôi chưa thử (nhưng câu hỏi này đã làm cho tôi muốn!) Là trả lại hoặc là a) một mô hình hơi khác dựa trên logic phía máy chủ, như 'người dùng' hoặc 'người đọc' và bật vào cùng một chế độ xem (để lưu cần hai chế độ xem) hoặc b) để trả về một mô hình phức tạp hơn với mỗi thuộc tính dữ liệu đi kèm với nói cờ 'có thể chỉnh sửa'. Điều này sau đó có thể được sử dụng để hiển thị các trường khác nhau hoặc trường trong các chế độ khác nhau trong ứng dụng ..... Tôi nhận thấy điều này không trả lời câu hỏi, quan tâm đến phương pháp bạn chọn và bất kỳ phát hiện nào bạn quan tâm!

+0

Liên quan một mô hình đầu ra khác nhau: Trên thực tế tôi đang làm điều này trong phần đầu tiên của tôi nhưng nó là một chút phức tạp để bắt đầu với. Nhưng tôi có thể nói với bạn rằng nó hoạt động giống như một sự quyến rũ và rằng ra khỏi hộp gây ra nó được tích hợp đầy đủ trong ACL – sra

+0

Từ một POV thực hiện cụ thể, làm thế nào bạn đã chọn để sản xuất mô hình? Có lẽ một mô hình với cờ 'có thể chỉnh sửa' trên mỗi trường mà chế độ xem phản hồi? hoặc lựa chọn tên thuộc tính '(được hiển thị dưới dạng hộp văn bản) và' readonlyname '(được hiển thị dưới dạng trường hiển thị?) và chế độ xem chỉ chọn các trường mà nó tìm thấy? Vấn đề phổ biến nhất của chúng tôi trong Ext là hiển thị chế độ xem ở chế độ ro/rw và cách phục vụ cho điều đó, rất quan tâm để xem bất kỳ suy nghĩ nào về chủ đề – dougajmcdonald

+0

Tôi sẽ cố gắng giải thích chi tiết hơn một chút: làm mô-đun (giao diện người dùng làm phụ trợ). Điều đó có nghĩa là mỗi người có ít nhất đó là backendcontroller của chính nó (một số chỉ có các mô hình/cửa hàng trong giao diện người dùng). Bên dưới dữ liệu, bộ điều khiển cũng có thể trao lại các lớp frontend xảy ra dựa trên ACL của người dùng và được hỗ trợ bởi hệ thống bộ nhớ đệm để giảm thời gian tải. ACL làm cho một phần của nó gây ra nó được thiết kế để dễ dàng chủ yếu bởi một người dùng (tôi cần phải cấu hình không có gì). Điều này làm việc để tải xuống ứng dụng và tải xuống hoàn toàn. – sra

0

Tôi nghĩ như đã được chỉ dẫn đúng, hãy để máy chủ gửi cho bạn thông tin đúng về loại người dùng đã đăng nhập. Ở phía máy khách, hãy để một bộ điều khiển quyết định chế độ xem nào sẽ hiển thị. Điều này sẽ là cùng một bộ điều khiển xử lý trang đăng nhập. CARD VIEW là bố cục mà bạn có thể sử dụng trong mục đích này. sau khi trang được hiển thị, hãy để bộ điều khiển khác xử lý các sự kiện được kích hoạt trong chế độ xem đó

Và mọi cách điều khiển không được thực hiện phần hiển thị là công việc xem chỉ sử dụng bộ điều khiển để phản ứng lại các sự kiện được kích hoạt chế độ xem

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