2012-04-30 50 views
48

Tôi đang cố gắng tìm ra cách tạo Bộ sưu tập các bộ sưu tập với backbone.js. Tôi khá mới để xương sống. Tôi có một cái gì đó giống như tình huống sau đây:Backbone.js Bộ sưu tập của Bộ sưu tập

+---------------+    +------------------+ 
| Playlists  |    | Playlist   | 
|---------------|   0..* |------------------| 
|    +-------------->| Name    | 
|    |    |     | 
|    |    |     | 
+---------------+    +-------+----------+ 
             | 
             | 
             |0..* 
             v 
           +------------------+ 
           | Track   | 
           |------------------| 
           | Name    | 
           | Artist   | 
           |     | 
           +------------------+ 

Trong mã này trông tương tự như sau:

var trackModel = Backbone.Model.extend({ 
    //trackdata 
}); 

var playlistModel = Backbone.Collection.extend({ 
    model : trackModel, 
    url : "playlist" 
}); 

var playlistsModel = Backbone.Collection.extend({ 
    url : "playlists", 
    model : playlistModel //This pretty sure doesn't work like I want, because there is no model attribute for collections :S 
}); 

Tuy nhiên tôi luôn nhận được một lỗi trong js console nói:

Uncaught TypeError: Object [object Object] has no method '_validate' 

khi Tôi cố gắng thực hiện một hàm kích hoạt xác thực (như thêm, tìm nạp, ...)

Nó m akes không có sự khác biệt nếu tôi thêm hàm validate hoặc _validate vào bất kỳ bộ sưu tập hoặc mô hình nào.

Tôi tin rằng điều này là do backbone.js không hỗ trợ các bộ sưu tập trong bộ sưu tập. Có cách nào khác hoạt động không?

UPDATE:

Đây là cách có vẻ ngay bây giờ

var Track = Backbone.Model.extend({ 
    //trackdata 
}); 

var Tracks = Backbone.Collection.extend({ 
    model:Track; 
}); 

var Playlist = Backbone.Model.extend({ 
    //name : ... 
    tracks: new Tracks() 
}); 

var Playlists = Backbone.Collection.extend({ 
    url : "playlists", 
    model : Playlist 
}); 
+0

Hình như các tài liệu xương sống hiện nay bao gồm một phần trên các mô hình lồng nhau & các bộ sưu tập, rất giống như ví dụ ở đây: http://backbonejs.org/#FAQ-nested –

+0

Đệ Nhất - vui mừng bạn đã giải quyết vấn đề của bạn. Hy vọng rằng đây sẽ là câu trả lời cho một số người khác, nhưng vấn đề của bạn đến từ mô hình dữ liệu xác định sai - không có "danh sách phát" (bạn chỉ có nhiều đối tượng danh sách phát được nhóm thành một nơi), dữ liệu của bạn chỉ chứa "danh sách phát" và " theo dõi "và có 1 danh sách phát có liên quan có thể có nhiều bản nhạc. Trong ví dụ đơn giản (đã được giải quyết) của bạn, mẫu này có thể nhìn thấy khá rõ ràng. – Dainius

Trả lời

30

Bạn muốn giải quyết vấn đề của bạn bằng cách chuyển Playlist của bạn từ một bộ sưu tập thành một mô hình. Nếu bạn nghĩ về điều đó, một số Playlist có thể sẽ có các thuộc tính khác (ví dụ: tên) sẽ không được đặt trên bộ sưu tập.

Playlists sau đó sẽ là bộ sưu tập của Playlist mô hình (thay vì bộ sưu tập), sẽ hoạt động mà không có lỗi.

var Track = Backbone.Model.extend({ 
    //trackdata 
}); 

var Playlist = Backbone.Model.extend({ 
    model : Track 
}); 

var Playlists = Backbone.Collection.extend({ 
    url : "playlists", 
    model : Playlist 
}); 
+0

Cảm ơn bạn, dường như hoạt động hoàn hảo: D Tuy nhiên, tôi cần một bộ sưu tập bổ sung, vì Danh sách phát có thể có nhiều bản nhạc: var Track = Backbone.Model.extend ({ // trackdata }); var Tracks = Backbone.Collection.extend ({ mô hình: Theo dõi; }); var Danh sách phát = Backbone.Model.extend ({ mô hình: Bài hát }); var Danh sách phát = Backbone.Collection.extend ({ url: "danh sách phát", mô hình: Danh sách phát }); Tôi hy vọng mọi thứ sẽ hoạt động mà không có sự cố với đồng bộ hóa với máy chủ. – krial

+0

Tôi không chắc chắn rằng cách tiếp cận đó sẽ hoạt động - bạn chỉ đơn giản là không thể đặt phần mở rộng của 'Backbone.Collection' (tức là' Tracks') làm mô hình của một bộ sưu tập khác. Bạn vẫn muốn giữ 'Track' là' Playlist.model' và bạn vẫn có thể sử dụng bộ sưu tập 'Tracks' để giúp tạo điều kiện đồng bộ hóa. –

+0

Tôi đã cập nhật mã trong câu hỏi.Tôi đã không đặt bộ sưu tập làm mô hình của một bộ sưu tập khác. Tôi thiết lập colelction (Tracks) như là một thuộc tính của mô hình Playlist (mở rộng mô hình). Nếu tôi đã thực hiện nó như bạn đã nói trong câu trả lời: 'Playlist-> model: track', tôi chỉ có thể lưu trữ một bản nhạc bên trong danh sách phát, vì Danh sách phát mở rộng Mô hình và Mô hình không có phương pháp để tạo bộ sưu tập thuộc tính Mô hình ... Hoặc là tôi sai? – krial

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