2013-08-01 38 views
5

Tôi muốn phân lớp một mô hình mà tôi đã tạo bằng Kiến trúc sư Sencha. Giả sử tôi có một mô hình gọi là BaseModel mà tôi đã tạo và tôi cần tạo một mô hình khác, gọi nó là MyModel, mở rộng BaseModel. Trong mã, nó sẽ giống như thế này:Kiến trúc sư Sencha: Phân lớp một mô hình

// BaseModel.js 
Ext.define('MyApp.model.BaseModel', { 
    extend: 'Ext.data.Model', 

    fields: [...] 
}); 

// MyModel.js 
Ext.define('MyApp.model.MyModel', { 
    extend: 'MyApp.model.BaseModel', 

    fields: [...] 
}); 

Tôi mới đến ExtJS và Sencha Kiến trúc sư nhưng điều này là cái gì đó rất đơn giản để làm trong mã và rất quan trọng để thích hợp thiết kế phần mềm mà tôi tưởng tượng phải có một cách để làm điều này trong Kiến trúc sư. Thật không may tôi không thể tìm ra cách để làm điều này một cách dễ dàng. Sau khi một số digging Tôi thấy điều này trong các tài liệu Sencha, http://docs.sencha.com/architect/2/#!/guide/classes, trong đó nêu sau đây dưới tiêu đề "Lớp học Custom":

Trong khi các tính năng được mô tả ở đây cho phép tạo ra các lớp học từ các mục được hỗ trợ trong hộp công cụ, đôi khi bạn có thể cần phải tạo một lớp không có dấu ngoặc đơn thuần hoặc một lớp mở rộng một lớp khác không xuất hiện trong Hộp công cụ. Bạn có thể làm điều này trong Kiến trúc sư bằng cách sử dụng mục Lớp trong Hộp công cụ.

Được rồi, âm thanh đầy hứa hẹn - vì vậy tôi đã thử điều đó. Trong thanh tra dự án tôi nhấn dấu cộng, đi đến "Class", và trong đó nhấn "Model". Vì vậy, bây giờ tôi có một lớp mô hình tùy chỉnh trong dự án của tôi. Tôi gọi nó là MyModel và tôi đặt cấu hình "mở rộng" thành MyApp.model.BaseModel. Vì vậy, bây giờ ít nhất là mã là chính xác và trông giống như những gì tôi có ở trên. Tuy nhiên, Kiến trúc sư dường như không có ý tưởng rằng lớp MyModel là một mô hình, mặc dù nó nằm trong phần "Mô hình" của Thanh tra dự án của tôi và mở rộng BaseModel. Nó không có bất kỳ thuộc tính cấu hình Mô hình nào như "các trường" mà tôi cần chỉ định và tôi không thể liên kết MyModel với bất kỳ loại Cửa hàng nào. Nói cách khác, Kiến trúc sư xử lý MyModel làm lớp hoàn toàn tùy chỉnh và không hiển thị bất kỳ hành vi nào của Mô hình. Điều đó về cơ bản làm cho cách thức phân lớp này hoàn toàn vô ích - tôi có thể phân lớp một Mô hình nhưng sau đó tôi không thể sử dụng nó như là một mô hình ở bất kỳ đâu trong dự án của tôi, vậy điểm là gì?

Vì vậy, câu hỏi đặt ra là làm cách nào để Kiến trúc sư xử lý MyModel làm mô hình thực tế? Đây không phải là cách chính xác để phân lớp trong Kiến trúc sư? Tôi mới bắt đầu dự án của mình nhưng tôi thấy trước cần phải phân lớp rất thường xuyên, cho dù đó là mô hình, bộ điều khiển, cửa hàng, v.v ... và nếu tôi không thể làm điều này với Kiến trúc sư thì đó là một hạn chế nghiêm trọng.

+0

cách giải quyết nó ?? –

Trả lời

0

Bạn đang làm tất cả những điều phù hợp. Kiến trúc sư trong hình thức hiện tại của nó 'hoạt động' theo cách này nhưng có một cái khác mà tôi nghĩ rằng sẽ cung cấp kết quả tốt hơn.

Hãy thử sử dụng một mô hình truyền thống và sử dụng createAlias ​​với một userAlias ​​thiết lập trên cơ sở mô hình aka xtype

+0

Bạn có ý định đặt userAlias ​​trên lớp cơ sở hoặc bắt nguồn không? Làm thế nào là sau đó cơ sở/quan hệ có nguồn gốc được thành lập? – matejk

0

tôi có kinh nghiệm cùng một vấn đề, đó sẽ là một đối phó breaker về sử dụng kiến ​​trúc sư.

tôi đã có thể làm việc xung quanh nó bằng cách tạo một lớp tùy chỉnh, mở rộng các mô hình hiện có, và sau đó tạo ra các thuộc tính tùy chỉnh trên lớp mới: "lĩnh vực", "hasMany", "ủy quyền" vv

Bạn có thể thiết lập các thuộc tính để nhập Array hoặc Object, sau đó cho phép bạn chỉnh sửa các trường trong trình soạn thảo mã.

Đây không phải là giải pháp hoàn hảo vì kiến ​​trúc sư không nhận ra lớp là mô hình và do đó bạn không thể kéo và thả các trường, v.v.

Tuy nhiên, mã được xuất ra là trung thành với mô hình được tạo tự nhiên.

Hy vọng điều này sẽ giúp, Ben

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