Tôi có mô hình xương sống được gọi là Member
- chứa dữ liệu thành viên như tên, họ, email, điện thoại, v.v. Nó cũng bao gồm các trường đa giá trị mà tôi cần giữ làm bộ sưu tập - đây là Degrees
và Affiliations
.Làm cách nào để tôi có thể triển khai phân tích cú pháp chính xác trong mô hình Backbone để bao gồm các bộ sưu tập?
Vấn đề tôi đang gặp phải khi gọi phương thức fetch()
trong mô hình của tôi là có sự không phù hợp trở kháng giữa các mảng cơ bản và đối tượng thu thập trong mô hình của tôi. Kể từ khi parse
theo định nghĩa là nghĩa vụ phải trả lại một băm được sử dụng trong set
hơn là thực sự thiết lập các giá trị, nó là không thể cho tôi để thiết lập các bộ sưu tập của tôi theo cách này. Ví dụ - nếu tôi trả về một đối tượng JavaScript cho Degrees
trông giống như sau: {degrees: [{id: 1, title: "PhD"}]}
, thì điều này sẽ chuyển đổi bộ sưu tập degree
của tôi thành một mảng phẳng. Đây là mã của tôi:
window.Models.Member = Backbone.Model.extend({
url: '/api/member',
initialize: function() {
_.bindAll(this);
this.set('degrees', new window.Collections.DegreesList());
this.fetch();
},
parse: function(response) {
var setHash = {};
setHash.first_name = response.first_name;
setHash.last_name = response.last_name;
setHash.office_phone = response.office_phone;
// When this is run, this.get('degrees') will now return a flat array rather than a DegreesList collection
setHash.degrees = _(response.degrees).each(function(item) {
return {id: item.id, title: item.title}
});
return setHash;
}
});
tôi có thể tự thiết lập các bộ sưu tập trong chức năng phân tích của tôi, nhưng điều đó dường như lật đổ của nó cách Backbone, và hacky.
EDIT: Tôi đã tạm thời giải quyết vấn đề bằng cách làm như sau:
parse: function(response) {
var setHash = {};
setHash.first_name = response.first_name;
setHash.last_name = response.last_name;
setHash.office_phone = response.office_phone;
this.get('degrees').reset(response.degrees);
return setHash;
}
tôi nghi ngờ đây là giải pháp tối ưu, nhưng nó chắc chắn làm việc cho bây giờ. Tôi đang mở để gợi ý tốt hơn.
Hãy thử điều này: mương 'phân tích cú pháp: 'function (nó doesn dường như không cần thiết), và thay vào đó bên trong 'initialize:' tự biến đổi thuộc tính 'degrees' từ một mảng thành một bộ sưu tập Backbone ... –
' parse' được gọi tự động khi phương thức 'fetch' trả về. Tôi có thể tự thiết lập lại thuộc tính 'độ' trở lại một bộ sưu tập sau khi' fetch' được gọi, nhưng sau đó tôi sẽ không có bất kỳ dữ liệu nào trong bộ sưu tập mà tôi muốn ... và dữ liệu đến. – rybosome
làm nhiều việc với 'độ' nếu bạn thêm chúng theo cách thủ công trong' phân tích'. Đi với gợi ý @ ŠimeVidas 'và sử dụng bộ sưu tập Backbone cho họ. Nó cho phép bạn đối phó với mỗi 'mức độ 'cách Backbone. – sntran