2011-10-13 32 views
8

Làm thế nào để bạn thay thế Backbone.sync để không làm gì? Ứng dụng của tôi có nút "Gửi" sẽ thực hiện AJAX POST cho tôi, vì vậy tôi không muốn sử dụng hành vi mặc định tự động ma thuật mà Backbone.sync cung cấp.Làm thế nào để thay thế Backbone.sync không có gì, thậm chí không localStorage?

Tôi cũng không muốn sử dụng bộ chuyển đổi Backbone LocalStorage như tôi đang cố gắng để làm cho trang web này tương thích với IE6 và 7.

Điều đó đang được nói, tôi khá nhiều chỉ muốn Backbone không làm gì cả ngoại trừ giữ lại hồ sơ trong bộ nhớ JS (tương tự như Spine.js). Điều này thậm chí có thể?

+0

đơn giản, Không sử dụng xương sống và chuyển sang một đơn giản Cross-Trình duyệt Ajax Handler. –

Trả lời

19

Cách dễ nhất và có lẽ tốt nhất để làm điều này là không thay thế Backbone.Sync, nhưng chỉ đơn giản là bỏ qua nó. Dưới đây là những phương pháp bạn không muốn gọi:

Bộ sưu tập:

  • lấy
  • tạo

Models:

  • lấy
  • tiết kiệm
  • tiêu hủy

Nếu bạn tránh gọi bất kỳ phương pháp nào trong số này, bạn sẽ bỏ qua hiệu quả Backbone.Sync và có thể viết mã của riêng bạn để thực hiện cuộc gọi AJAX.

Tôi đã viết rất nhiều mã Backbone mà không bao giờ có một cuộc gọi máy chủ liên quan, khi tôi bắt đầu. Không có quy tắc để nói rằng bạn phải sử dụng tất cả các khả năng của Backbone. Trong thực tế, tôi sẽ nói điều ngược lại là sự thật. Xương sống được viết theo cách thức mô-đun như vậy với từng lĩnh vực chức năng và chuyên môn hóa rất tốt, bạn chỉ nên sử dụng những gì bạn thực sự cần.

Tạo mô hình của bạn trong bộ nhớ, gọi setget để lưu trữ dữ liệu. Đưa chúng vào bộ sưu tập với addremove chúng khi cần. Chuyển các mô hình và bộ sưu tập của bạn tới các chế độ xem của bạn và hiển thị chúng cho DOM HTML. Chỉ cần tránh gọi các phương pháp tôi liệt kê ở trên và bạn sẽ không phải lo lắng về Backbone.Sync.

+0

cảm ơn. điều này làm cho cảm giác hoàn hảo. trên một sidenote nếu bạn không sử dụng Model.destroy() làm thế nào để bạn chính xác "phá hủy" một cái gì đó? Sử dụng collection.remove và liên kết với sự kiện xóa? – kidcapital

+0

vâng, điều đó sẽ làm được. de-tham chiếu các mô hình ở khắp mọi nơi có một tài liệu tham khảo và nó sẽ được thu gom rác thải. –

1

Tôi đã từng thực hiện this gist như là một phần của hướng dẫn về Backbone.js. Nó fakes Backbone.sync bằng cách chỉ viết vào một bản ghi, nhưng để cho nó một semblance của chủ nghĩa hiện thực nó cũng sao chép các .cid thuộc tính của một mô hình để nó là .id thuộc tính để làm cho các mô hình xuất hiện để được đồng bộ hóa. Cẩn thận với những hậu quả không mong muốn khác nhau của việc sử dụng kỹ thuật đó trong sản xuất! Nhưng tất cả chúng ta đều đồng ý người lớn ở đây, đúng không?

Dưới đây là ý tưởng tương tự mà không có sự khai thác gỗ:

Backbone.sync = function(method, model, succeeded) { 
    if(typeof model.cid != 'undefined') { 
     // It's a freshly made model 
     var cid = model.cid; 
     // ..fake that it's .cid turns into a "real" .id: 
     model.unset('cid').set({id:cid}, {silent:true}); 
    } 
    // Oh yes, it all went sooo well ;-) 
    succeeded(model); 
}; 
+2

Tôi nghĩ rằng API đã thay đổi kể từ khi bạn viết điều này, bởi vì đối số thứ ba không phải là một cuộc gọi lại. Tôi chỉ 'trả lại false' và có vẻ như nó ổn.Nhưng bạn đề cập đến "những hậu quả không mong muốn khác nhau" - những gì sẽ là, nếu tất cả dữ liệu của tôi là phía máy khách, không cần phải kiên trì? –

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