Cách đúng để thực hiện yêu cầu PATCH
trong khi lưu thuộc tính của mô hình trong Backbone.js là gì?Phương pháp yêu cầu PATCH trong Backbone.js
Trả lời
Kể từ Backbone.js v0.9.9, bạn có thể chỉ cần chuyển { patch: true }
đến save()
.
Read more: http://backbonejs.org/#changelog
Bạn sẽ phải ghi đè Backbone.sync
và mở rộng các phương pháp ánh xạ hiện
var methodMap = {
'create': 'POST',
'update': 'PUT',
'delete': 'DELETE',
'read': 'GET',
'patch': 'PATCH'
};
bạn sẽ phải tạo ra phương pháp vá của riêng bạn trên một mô hình như
Backbone.Model.prototype.patch = function(options)
{
// some code here that checks what attributes have changed since last save
var xhr = (this.sync || Backbone.sync).call(this, 'patch', this, options);
return xhr;
}
Tôi chắc chắn bạn có thể mở rộng Backbone thêm để bao gồm OPTIONS
và HEAD
nếu bạn cần phải
Lưu ý rằng, ngay cả thông qua jQuery cũng hỗ trợ các phương pháp PATCH, OPTIONS và HEAD, trình duyệt của người dùng cuối có thể không.
Ngoài James Cropchos answer Tôi muốn thêm những điều sau đây, vì this steals some hours từ tôi và có lẽ sẽ giúp người khác:
Nếu bạn sử dụng model.save(attributesToPatchObject,{patch: true})
như nó có thể từ xương sống v.0.9. 9 như đã nêu trong câu trả lời của James Cropchos, bạn có thể tự hỏi làm cách nào để xác định thuộc tính nào đã thay đổi kể từ cuộc gọi cuối cùng của model.save()
để chuyển chúng thành attributesToPatchObject
, đó là đối số đầu tiên từ model.save()
(hoặc model.fetch()
nếu bạn không lưu mô hình gần đây) .
Chính xương sống không theo dõi các thuộc tính đó. Tôi nghĩ rằng các phương pháp model.changedAttributes()
có thể phù hợp, nhưng như backbone-doc says phương pháp này trả về
một hash của các thuộc tính duy nhất của mô hình đã thay đổi kể từ set cuối cùng, hoặc giả nếu có none
Vì vậy, phương pháp này không phù hợp với nhu cầu này. Sau một số nghiên cứu, tôi phát hiện ra rằng chính xương sống không theo dõi các thuộc tính chưa được lưu (Tôi biết, không phải là một phát hiện tuyệt vời nếu tôi đã đọc tài liệu cẩn thận hơn).
Tôi phát hiện ra rằng backbone.trackit là một plugin xương sống chính xác thêm tính năng cần thiết vào xương sống, bằng cách thêm phương thức unsavedAttributes()
vào mô hình. Các tài liệu của backbone.trackit nói về phương pháp này:
Đối xứng với mô hình của mô hình đã thay đổi kể từ lần lưu cuối cùng hoặc sai nếu không có . Giống như changedAttributes, một băm thuộc tính bên ngoài có thể được chuyển vào, trả về các thuộc tính trong hàm băm đó khác với mô hình.
Nó hoạt động như thế này:
//fetch an existing model from server
model.fetch({
success : function(model, respose, options) {
//tell backbone.trackit to track unsaved Attributes
model.startTracking();
}
});
//now some changes to the model happen
model.set("someProperty", "someValue");
/* save the model to server using the PATCH-Method
and only send the unsaved Attributes;
in this case only "someProperty" is sent
*/
model.save(model.unsavedAttributes(), {patch: true});
Kể từ khi unsavedAttributes()
lợi nhuận sai nếu không có thuộc tính chưa được lưu, bạn có thể bổ sung quấn tuyên bố save()
của bạn trong vòng một điều kiện if-mà kiểm tra nếu unsavedAttributes()
lợi nhuận một cái gì đó khác rồi false và chỉ thực hiện yêu cầu PATCH nếu cần thiết (vì có gì đó đã thay đổi).
LƯU Ý: Bạn không phải gọi số fetch()
để sử dụng startTracking()
để bạn có thể sử dụng phương pháp này ngay cả với các mô hình mới được tạo (model.isNew()
trả về đúng trên mô hình đó), nếu có.
Hy vọng điều này có thể tiết kiệm cho người nào đó một chút thời gian nghiên cứu.
- 1. Có thể khớp với yêu cầu PATCH trong Happstack không?
- 2. Phương pháp thử yêu cầu http yêu cầu
- 3. Backbone.js model.destroy() không gửi yêu cầu DELETE
- 4. Yêu cầu PATCH trên Chrome Cross-Domain không hoạt động
- 5. php yêu cầu gọi lớp từ bên trong phương pháp
- 6. PATCH phương pháp xử lý trên Google AppEngine webapp2
- 7. Yêu cầu tính chất của phương pháp nhà máy chung
- 8. Phương pháp không tĩnh yêu cầu mục tiêu C#
- 9. Scala Chơi 2, đi qua yêu cầu phương pháp
- 10. Yêu cầu tìm nạp xương sống là phương pháp OPTIONS
- 11. Yêu cầu phương pháp 'POST' không được hỗ trợ
- 12. Backbone.js - model.save() không kích hoạt yêu cầu PUT
- 13. Cú pháp yêu cầu trong ClojureScript REPL
- 14. Bạn có thể thực hiện yêu cầu HTTP PATCH từ Javascript không?
- 15. clojure yêu cầu lý do cú pháp
- 16. Yêu cầu pháp nhân quá lớn PHP
- 17. Các phương pháp hay nhất để sử dụng yêu cầu trong Ruby là gì?
- 18. $ .post ném "Yêu cầu bất hợp pháp"
- 19. Sự kiện toàn cầu Backbone.js
- 20. cách phân tích cú pháp yêu cầu http trong C++
- 21. Yêu cầu các câu lệnh bên trong phương thức?
- 22. Phương thức Yêu cầu Máy chủ PHP
- 23. Phương thức yêu cầu kiểm tra ASP
- 24. Cách xử lý phản hồi 204 trong yêu cầu thu thập Backbone.js
- 25. ERROR Phương thức tĩnh yêu cầu cá thể rỗng, phương thức không tĩnh yêu cầu cá thể không rỗng
- 26. Cách nhận loại phương thức yêu cầu trong `app.all()`?
- 27. Monkey-patch Lớp Python
- 28. Trong php, yêu cầu trong tập tin yêu cầu?
- 29. Làm thế nào để khai phương pháp ApplicationController theo yêu cầu spec
- 30. Phương pháp điều khiển tham số Sinatra trống rỗng theo yêu cầu bài đăng JSON
Wow, Ngăn xếp ngăn xếp không cho phép đăng câu hỏi với các từ toàn bộ mũ trong tiêu đề. Thông minh. – Burnash