2012-04-16 24 views
6

Tôi thực sự mới với mẫu MVC trong Ext. Tôi có một tabpanel với nhiều phiên bản của cùng một thành phần (chúng ta hãy gọi nó là sản phẩm), mỗi người nên gọi máy chủ khi nó được mở, với một tham số id.ExtJS4 - Lưu trữ trên mỗi bảng điều khiển ví dụ?

Ngay bây giờ, để tạo ra các tab - Tôi sử dụng này trong bộ điều khiển Sản phẩm nào tạo ra một thể hiện mới của một cái nhìn, nhưng tôi cảm thấy như đó là thực sự không chính xác.

createMainView: function (opts) { 
    return Ext.widget("productDisplay", opts); 
} 

tôi gọi nó từ tôi điều khiển "chính", như thế này:

var tab = this.application.getController("Products") 
    .createMainView({ productId : id, closable: true }) 

tabs.add(tab); 
tabs.setActiveTab(tab); 

cách chính xác để sử dụng đúng cách nhiều trường hợp của một cái nhìn, từng có một thể hiện của một cửa hàng và hành vi là gì (thông qua bộ điều khiển).

Tôi có thể sử dụng một cửa hàng được đặt tên cho chúng (với tệp js trong app/store/product.js) không?

Tôi có nên gọi thủ công load trên cửa hàng từ bộ điều khiển (để vượt qua productId) hoặc có cách nào đẹp hơn không?

Trả lời

6

Đó là loại câu hỏi rất rộng và thú vị đòi hỏi giải thích lớn và kỹ lưỡng (bạn có thể tìm thấy btw trên Sencha.com trong hướng dẫn và hướng dẫn sử dụng). Tôi muốn đánh dấu vài điểm để bạn có điều gì đó để bắt đầu:

  1. Cửa hàng thường là đối tượng toàn cầu. Bạn không giữ hai trường hợp của một cửa hàng nói chung. Bạn có thể sử dụng tính năng lọc (cục bộ hoặc từ xa) nếu bạn cần trình bày thông tin từ cửa hàng đó trong một số chế độ xem khác nhau. Thời gian duy nhất bạn cần để sao chép cửa hàng là nếu bạn muốn trình bày thông tin khác nhau từ cửa hàng đó trong hơn 2 chế độ xem khác nhau cùng một lúc.

  2. Bộ điều khiển thường được sinh ra bởi đối tượng ứng dụng chính. Bạn không phải làm bất cứ điều gì đặc biệt - chỉ cần liệt kê chúng trong thuộc tính controllers: []. Và sau đó sinh ra khi ứng dụng được khởi chạy (trước khi các khung nhìn của chúng được tạo ra và được hiển thị). Ghi nhớ nó trong tâm trí.

  3. Nếu bạn có chế độ xem phương thức - bạn có thể tạo nó theo cách thủ công và sử dụng lại hoặc hủy và tạo lại sau. Bạn có thể thêm tính năng lọc và tải vào bộ điều khiển để tạo các chế độ xem này. Và bạn có thể tái sử dụng cùng một đối tượng xem/điều khiển cho các tab khác nhau nếu bạn muốn.

  4. Nếu chế độ xem của bạn hiển thị một thể hiện của đối tượng (như một sản phẩm được hiển thị trên mỗi tab) - không đính kèm các cửa hàng vào các chế độ xem đó. Chỉ cần vượt qua họ mô hình cá nhân (hồ sơ).

+0

cảm ơn câu trả lời của bạn. Tôi đã xem các ví dụ về lọc cửa hàng trước đây, nhưng đó là khi có một chế độ xem được cung cấp dữ liệu đã lọc, trong trường hợp của tôi có nhiều tab tồn tại cùng một lúc, mỗi tab hiển thị dữ liệu khác nhau (cùng loại, đó là lý do tại sao Tôi hỏi về nhân đôi cửa hàng), họ không phải là phương thức (nếu bạn có nghĩa là phương thức như nhắc), họ tồn tại cùng một lúc. – Madd0g

+0

Vì vậy, bạn có cần một cửa hàng (mảng cơ bản) trong mỗi khung nhìn hay chỉ là mô hình (bản ghi)? – sha

+0

Tôi không biết rằng hồ sơ có thể được sử dụng bên ngoài một cửa hàng - Tôi đoán đó là lý do tại sao một mô hình có thể có một proxy. Có thể một bản ghi duy nhất có chức năng tải/lưu/liên kết không? – Madd0g

0

Tôi khuyên bạn nên tạo các cửa hàng chỉ liên quan đến cá thể xem đó bên trong phương pháp initComponent của chế độ xem.

Bộ điều khiển của bạn là control trình xử lý phải được mã hóa theo cách mà chúng có thể phân biệt chế độ xem nào đã gửi sự kiện. Điều này không quá khó vì hầu như tất cả các sự kiện xem đều chứa tham chiếu đến thành phần đã kích hoạt sự kiện. Sau đó, bạn có thể sử dụng công cụ chọn truy vấn tương đối, ví dụ: myEventFiringComponent.up('anotherComponent') hoặc myEventFiringComponent.down('anotherComponent') để xử lý trên một thành phần khác trong cùng một chế độ xem nếu bạn cần.

Vui lòng xem this post để được giải thích đầy đủ.

+0

Cảm ơn Geronimo, đó chính xác là những gì tôi đã làm. Tôi đang tạo cửa hàng dưới 'initComponent' và đảm bảo rằng mọi thứ trong' this.control' có thể tham chiếu đến chế độ xem cụ thể (và cái gì không - tôi cố gắng bọc trong 'fireEvent' của riêng tôi). – Madd0g

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