2012-08-05 32 views
5

Tôi đang chuyển đổi ứng dụng xương sống của mình để nó bắt đầu giao tiếp với máy chủ, trước đây tôi đã điền dữ liệu thử nghiệm bằng cách sử dụng .add()Kích hoạt xương sống .add khi một bộ sưu tập là .fetched?

Tôi đã gắn một số sự kiện vào bộ sưu tập thêm sự kiện. Vì vậy, mỗi lần một mục được thêm vào bộ sưu tập, tôi có thể hiển thị chế độ xem và cập nhật một số thống kê.

có vẻ như ngay khi tôi thêm cuộc gọi .fetch() để nhận dữ liệu từ máy chủ, sự kiện thêm sẽ dừng.

ví dụ

var PayableCommitmentCollection = Backbone.Collection.extend({ 
    model:PayableCommitment, 
    url:"/cc/account/contributions/", 

    initialize: function() { 
     this.bind("add",this.setInitialAmount,this); 
    } 
} 

this.SetInitialAmount() không bao giờ được gọi là sau khi lấy tạo ra các mô hình trong bộ sưu tập.

Tôi cũng có 2 chế độ xem đang xem các mục sẽ được thêm vào bộ sưu tập này hiện không cập nhật. Công việc rõ ràng của tôi là viết lời gọi AJAX của riêng tôi để tôi có thể thêm các mục giống như cách tôi đã phát triển trong thời gian này, tuy nhiên, tôi chắc rằng xương sống có những đồ thông minh giúp tôi ở đây.

Bất kỳ ai cũng có thể đề xuất cách tôi có thể liên kết để hoàn thành tìm nạp hoặc để kích thích sự kiện thêm.

Trả lời

5

Từ :

lấycollection.fetch([options])

Fetch các thiết lập mặc định của mô hình cho bộ sưu tập này từ máy chủ, thiết lập lại bộ sưu tập khi chúng đến.

Và một reset:

resetcollection.reset(models, [options])

Thêm và xóa mô hình cùng một lúc là tất cả tốt và tốt, nhưng đôi khi bạn có rất nhiều mô hình để thay đổi điều đó bạn' d thay vì chỉ cập nhật bộ sưu tập hàng loạt. Sử dụng đặt lại để thay thế bộ sưu tập bằng danh sách mô hình mới (hoặc băm thuộc tính), kích hoạt một sự kiện "reset" duy nhất ở cuối.

Vì vậy, một fetch sẽ kích hoạt một "reset" sự kiện duy nhất chứ không phải là một loạt các sự kiện "add". Bạn cần có phiên bản toàn bộ số setInitialAmount để bạn có thể liên kết với "reset".


Trong Backbone 1.0, Collection#fetch đã cho biết:

lấycollection.fetch([options])

Fetch các thiết lập mặc định của mô hình cho bộ sưu tập này từ máy chủ, thiết lập chúng trên bộ sưu tập khi họ đến.
[...]
Hành vi của tìm nạp có thể được tùy chỉnh bằng cách sử dụng các tùy chọn có sẵn set. Ví dụ, để lấy một bộ sưu tập, nhận được một sự kiện "add" cho mỗi mô hình mới, và một sự kiện "change" cho mỗi mô hình hiện thay đổi, mà không loại bỏ bất cứ điều gì: collection.fetch({remove: false})

Vì vậy, nếu bạn đang sử dụng 1.0 trở lên sau đó tất cả các bạn cần làm là gọi số fetch của bạn với tùy chọn remove: false.

+0

cảm ơn, việc đặt lại này có ý nghĩa hơn. Tôi đã giả định rằng bộ sưu tập đã trở lại trống rỗng. Tôi cũng có thể thay đổi khai thác thử nghiệm của mình để sử dụng đặt lại. – Bluephlame

+0

Trong Backbone 1.0.0, bây giờ bạn thực hiện điều này bằng cách chuyển 'remove: false' thành một tùy chọn' fetch'. – Radu

+0

@Radu: Cảm ơn những người đứng đầu. Tốt hơn rồi? –

6

Phương thức tìm nạp chấp nhận băm tùy chọn. Một trong các tùy chọn này có thể là tùy chọn "thêm", gọi số thêm vào bộ sưu tập thay vì đặt lại.

collection.fetch({ add: true }); 
+0

Không còn hoạt động cho Backbone 1.0.0. Xem nhận xét về câu trả lời ở trên. – Radu

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