2011-08-24 23 views
5

Như tôi có thể thấy trong các nguồn Spine.js, hàm Model.each() trả về các bản ghi của Mô hình theo thứ tự các ID của chúng. Điều này hoàn toàn không đáng tin cậy trong các trường hợp đặt hàng quan trọng: danh sách dài người, v.v.Bản ghi mẫu đặt hàng trong Spine.js

Bạn có thể đề xuất một cách để giữ nguyên bản ghi thứ tự (theo thứ tự như chúng đến qua refresh() hoặc các chức năng tương tự) không?

P.S. Mọi thứ thậm chí còn tồi tệ hơn vì theo mặc định, Spine.js sử dụng GUIDs mới làm ID. Vì vậy, thứ tự hồ sơ là hoàn toàn ngẫu nhiên mà không thể chấp nhận.

EDIT: Có vẻ rằng trong cam kết cuối cùng https://github.com/maccman/spine/commit/116b722dd8ea9912b9906db6b70da7948c16948a
họ đã làm cho nó có thể, nhưng tôi đã không kiểm tra nó bản thân mình vì tôi chuyển từ cột sống để loại trực tiếp.

+0

bây giờ tôi đã tìm ra bằng cách sử dụng Array.sort() – irium

+0

http://groups.google.com/group/spinejs/browse_thread/thread/857e463e93f5bf2c của JavaScript – abernier

Trả lời

2

Bumped vào cùng một vấn đề học tập spine.js. Tôi đang sử dụng JS thuần túy, vì vậy tôi đã bỏ qua ví dụ liên hệ http://spinejs.com/docs/example_contacts đã giúp ích cho điều này. Như một vấn đề của thực tế, bạn có thể không thực sự giữ trật tự từ máy chủ theo cách này, nhưng bạn có thể làm đặt hàng của riêng bạn với javascript.

Lưu ý rằng tôi đang sử dụng Mẫu thành phần tại đây. (Http://spinejs.com/docs/controller_patterns)

Trước tiên, bạn thiết lập các chức năng mà là gonna làm việc phân loại bên trong mô hình:

/*Extending the Student Model*/ 
Student.extend({ 

    nameSort: function(a,b) { 
     if ((a.name || a.email) > (b.name || b.email)) 
      return 1; 
     else 
      return -1 
    } 
}); 

Sau đó, trong bộ điều khiển sinh viên bạn thiết lập các yếu tố sử dụng loại:

/*Controller that manages the students*/ 
var Students = Spine.Controller.sub({ 

      /*code ommited for simplicity*/ 

      addOne: function(student){ 
      var item = new StudentItem({item: student}); 
      this.append(item.render()); 
    }, 

    addAll: function(){ 
      var sortedByName = Student.all().sort(Student.nameSort); 
      var _self = this; 
      $.each(sortedByName, function(){_self.addOne(this)}); 
    }, 


}); 

Và đó là nó.

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