ApplicationJavaScript, đối tượng ghi đè mà không làm mất tài liệu tham khảo
tôi đang làm việc trên một ứng dụng web đơn giản mà được xây dựng trên đầu trang của AngularJS. Ứng dụng sẽ có thể hoạt động ngoại tuyến cũng như trực tuyến. Khi người dùng ngoại tuyến, các thay đổi đối với dữ liệu được lưu trữ cục bộ. Do đó, id được sử dụng trong ứng dụng này trong chế độ ẩn chỉ là tạm thời của id, họ nhận được thay thế khi tải lên máy chủ
Vấn đề
Các dữ liệu được sử dụng trong các ứng dụng bao gồm các đối tượng phức tạp (với các quan hệ/tham chiếu đến các đối tượng khác). Khi tôi đang lưu vào máy chủ, tôi muốn các chế độ xem được cập nhật với id "thực" mới. Tuy nhiên, vì JavaScript hoạt động với các đối tượng dưới dạng tham chiếu nên không thể thực hiện những gì tôi muốn: $scope.data = newdata
Điều này không ghi đè $ scope.data nhưng tạo đối tượng mới. Tham chiếu cũ cho dữ liệu cũ vẫn còn đó.
dụ Giản
var x = {id: 1, name: "myObject"}
var c = x // c = {id: 1, name: "myObject"}
x = {id: 2, name: "myNewObject"}
// c = {id: 1, name: "myObject"}
Như bạn thấy, c vẫn là một tham chiếu đến đối tượng cũ. Trong thực tế, điều này khiến cho chế độ xem của tôi không được cập nhật với dữ liệu mới vì nó vẫn bị ràng buộc với dữ liệu cũ. Những gì tôi cần là ghi đè lên các thuộc tính của, trong ví dụ này, x. Tôi cần phải làm điều này một cách đệ quy vì các đối tượng thực sự của tôi rất phức tạp, tuy nhiên nó không nên nhập bất kỳ tham chiếu vòng tròn nào, vì điều này có thể sẽ gây ra tràn bộ đệm. Nếu tôi ghi đè a bằng b và a có các thuộc tính mà b không có, các thuộc tính đó phải được loại bỏ.
gì tôi cần
Tôi cần một số loại chức năng ghi đè tất cả tài sản trong một (object cũ) với các thuộc tính trong b (đối tượng mới). Tất cả các thuộc tính tồn tại trong một nhưng không phải trong b nên được loại bỏ.
Đó là khá snazzy. Beats tự viết ra tất cả các thuộc tính. – tylerjgarland