2012-05-10 45 views
6

Khi nào thích hợp để lọc một bộ sưu tập so với việc có một số bộ sưu tập trong Backbone?Lọc bộ sưu tập so với một số bộ sưu tập trong Backbone?

Ví dụ: xem xét ứng dụng thư viện nhạc. Nó sẽ có một cái nhìn để hiển thị các thể loại và một cái nhìn khác để hiển thị âm nhạc của thể loại được chọn.

Bạn có muốn tạo một bộ sưu tập khổng lồ với tất cả nhạc và sau đó lọc nó hoặc một số bộ sưu tập nhỏ hơn không?

Chỉ có một bộ sưu tập sẽ cho phép bạn thêm các tính năng để lọc theo các thuộc tính khác, nhưng giả sử bạn có tấn nhạc: làm thế nào để bạn ngăn tải tất cả khi ứng dụng bắt đầu nếu người dùng chỉ cần 1 thể loại?

Trả lời

4

Tôi nghĩ rằng cách tiếp cận đơn giản nhất là có một Bộ sưu tập độc đáo phổ biến mà, một cách thông minh, fetch một đã lọc theo thể loại dữ liệu từ máy chủ:

// code simplified and no tested 
var SongsCollection = Backbone.Collection.extend({ 
    model: Song, 
    url: function() { 
    return '/songs/' + this.genre; 
    }, 
    initialize: function(opts){ 
    this.genre = opts.genre; 
    } 
}); 

var mySongsCollection = new SongsCollection({ genre: "rock" }); 
mySongsCollection.fetch(); 

Bạn phải làm cho Bộ sưu tập này để tái nạp dữ liệu từ máy chủ bất kỳ lúc nào Người dùng thay đổi thể loại đã chọn:

mySongsCollection.genre = "punk"; 
mySongsCollection.fetch(); 
+0

Điều này nghe có vẻ hấp dẫn, nhưng nếu tôi cần thêm một bộ lọc tìm kiếm khác, hãy nói, tên nghệ sĩ? Làm thế nào để tôi nói với máy chủ rằng trong/bài hát/elvis tham số là một tên nghệ sĩ, nhưng nó/bài hát/rock đó là thể loại? (vâng, tôi hoàn toàn nghỉ ngơi) – wannabeartist

+2

Bạn có thể thực hiện việc này theo một vài cách. Đầu tiên là có một điểm cuối riêng biệt cho mỗi cái, vì vậy bạn có/bài hát/nghệ sĩ/elvis và/bài hát/thể loại/rock. Cách khác là sử dụng tham số chuỗi truy vấn, vì vậy bạn có thể có/songs /? Artist = elvis & genre = rock. Sở thích của tôi là tùy chọn đầu tiên vì nó cung cấp URL sạch hơn. – Mun

+0

Cảm ơn bạn đã làm rõ! – wannabeartist

1

Đó chủ yếu là một lựa chọn thiết kế, nhưng bỏ phiếu của tôi sẽ là chọn một lược đồ phản ánh một cách lỏng lẻo cơ sở dữ liệu lưu trữ các bộ sưu tập.

Nếu bạn có khả năng lưu trữ dữ liệu trong cơ sở dữ liệu SQL, bạn sẽ có nhiều khả năng không có bảng riêng cho songsgenres. Có thể bạn sẽ kết nối chúng thông qua cột genre_id trong bảng bài hát hoặc (nếu bài hát có thể có nhiều thể loại) theo bảng riêng biệt song_genres. Do đó, bạn có thể muốn các bộ sưu tập riêng biệt đại diện cho thể loại và các bài hát trong đó. Trong trường hợp này, backbone-relational có thể là công cụ rất hữu ích để giúp giữ chúng thẳng.

Nếu bạn đang lưu trữ thông tin trong bất kỳ loại quan hệ/khóa-giá trị/tài liệu lưu trữ, nó có thể có ý nghĩa để chỉ lưu trữ thể loại với bài hát trực tiếp và lọc cho phù hợp. Trong trường hợp này, bạn có thể sẽ lưu trữ các khóa/truy vấn tài liệu của mình theo cách mà bạn có thể truy cập bài hát trực tiếp (ví dụ: qua songs) hoặc thông qua thể loại (ví dụ: genre:genre_id/songs). Nếu đây là tuyến đường bạn đi, có thể thuận tiện hơn khi chỉ tạo một bộ sưu tập các bài hát khổng lồ và lập kế hoạch thiết lập các bộ lọc tương ứng trong cả môi trường ứng dụng và cơ sở dữ liệu.

+0

Cảm ơn, những âm thanh đó giống như đối số vững chắc cho lựa chọn – wannabeartist

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