2012-11-13 26 views
5

Trong ứng dụng của tôi, có nhiều tài khoản người dùng khác nhau. Những gì tôi đang cố gắng làm là hiển thị loader.gif cho đến thời điểm .fetch() tìm nạp nội dung từ url tài nguyên + hiển thị chế độ xem và ẩn loader khi tìm nạp xong.Gọi hàm backbone() thành công không hoạt động

Bây giờ, khi người dùng đăng nhập, danh sách các mục TODO của anh ta được tìm nạp theo số Todos.fetch và gọi lại thành công, loader.gif mờ dần.

$("#app").hide(); 
$(".loader").show(); 
Todos.fetch({ 
    success: function(){ 
      $("#app").show(); 
      $(".loader").hide(); 
     } 
}); 

Điều này làm việc tốt cho tất cả người dùng ngoại trừ những người không có mặt hàng Todo. Đối với những người dùng này, gọi lại thành công không được kích hoạt và số còn lại là loader.gif. Có cách nào khác để ẩn số loader.gif không?


Dường như với tôi chức năng success chỉ được gọi khi thậm chí một mô hình duy nhất được thêm vào bộ sưu tập. Nếu không có gì để thêm vào bộ sưu tập, success không được gọi.

+3

Một số mã để chứng minh sự cố của bạn sẽ hữu ích. – nikoshr

+0

Đã thêm mã. Mặc dù tôi không nghĩ rằng có bất kỳ vấn đề với mã vì khi có 'Todo' mục để tải i.e khi có cái gì đó để thêm vào bộ sưu tập' Todos', chức năng được gọi. Mặc dù, khi không có gì để thêm vào bộ sưu tập 'Todos', hàm này không được gọi. –

Trả lời

19

BackboneJS tìm đại biểu để đồng bộ hóa. sync trả về một đối tượng jqXHR để sử dụng riêng của bạn.

Bạn có thể chỉ:

Todos.fetch({ 
    success: function(){ 
      $("#app").show(); 
      $(".loader").hide(); 
     } 
}).always(function() { $(".loader").hide() }); 

Bạn có thể đọc thêm về nó trong this blog post.

Ngoài ra, hãy đảm bảo rằng máy chủ của bạn trả lại một json hợp lệ khi bộ sưu tập trống. Nếu đáp ứng không phải là một json hợp lệ, bạn sẽ nhận được một thất bại.

+0

Tìm thấy tuyệt vời :) Cảm ơn một tấn và đang sử dụng Rails mà sẽ chăm sóc hầu hết mọi thứ. –

+1

Rất đẹp! Nhưng hãy nhớ rằng nó không cung cấp các đối số (mô hình, phản hồi, tùy chọn) mà bạn mong đợi trong cuộc gọi lại thành công. Vì vậy, bạn phải tìm cách khác để truy cập lại vào mô hình, nếu đó là những gì bạn đang làm trong cuộc gọi lại thành công của bạn. – Micros

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