Tôi có 2 kiểu và một bộ sưu tập. JobSummary
là một mô hình, JobSummaryList
là một tập hợp các JobSummary
mục, và sau đó tôi có một mô hình JobSummarySnapshot
có chứa một JobSummaryList
:Mô hình Backbone.js với bộ sưu tập
JobSummary = Backbone.Model.extend({});
JobSummaryList = Backbone.Collection.extend({
model: JobSummary
});
JobSummarySnapshot = Backbone.Model.extend({
url: '/JobSummaryList',
defaults: {
pageNumber: 1,
summaryList: new JobSummaryList()
}
});
Khi tôi gọi fetch
trên đối tượng JobSummarySnapshot
, nó được tất cả mọi thứ ... Trừ khi tôi di chuyển qua bộ sưu tập summaryList
, tất cả chúng đều thuộc loại object
và không phải là JobSummary
.
Tôi cho rằng điều này có ý nghĩa vì khác với đối tượng defaults
, nó không biết rằng summaryList
phải thuộc loại JobSummaryList
. Tôi có thể đi qua mỗi mục và chuyển đổi nó thành một đối tượng JobSummary
, nhưng tôi đã hy vọng có một cách để làm điều đó mà không cần phải làm điều đó bằng tay.
Đây là mã thử nghiệm của tôi (làm việc jsfiddle here):
var returnData = {
pageNumber: 3,
summaryList: [
{
id: 5,
name: 'name1'},
{
id: 6,
name: 'name2'}
]
};
var fakeserver = sinon.fakeServer.create();
fakeserver.respondWith('GET', '/JobSummaryList', [200,
{
'Content-Type': 'application/json'},
JSON.stringify(returnData)]);
var callback = sinon.spy();
var summarySnapshot = new JobSummarySnapshot();
summarySnapshot.bind('change', callback);
summarySnapshot.fetch();
fakeserver.respond();
var theReturnedList = callback.getCall(0).args[0].attributes.summaryList;
_.each(theReturnedList, function(item) {
console.log('Original Item: ');
console.log(item instanceof JobSummary); // IS FALSE
var convertedItem = new JobSummary(item);
console.log('converted item: ');
console.log(convertedItem instanceof JobSummary); // IS TRUE
});
UPDATE: Nó xảy ra với tôi rằng tôi có thể ghi đè lên các chức năng phân tích và thiết lập nó như vậy ... Tôi có này ngay bây giờ:
JobSummarySnapshot = Backbone.Model.extend({
url: '/JobSummaryList',
defaults: {
pageNumber: 1,
summaryList: new JobSummaryList()
},
parse: function(response) {
this.set({pageNumber: response.pageNumber});
var summaryList = new JobSummaryList();
summaryList.add(response.summaryList);
this.set({summaryList: summaryList});
}
});
Điều này hoạt động cho đến nay. Để câu hỏi mở trong trường hợp ai đó đã nhận xét về nó ....
thank you very much. Tôi đã phạm tội chỉ đọc một nửa những điều ngày hôm nay và một lần nữa, nó bit tôi. Nó rõ ràng nói trong các tài liệu đó, như bạn đã đề cập ở trên, bạn trả lại obj từ chức năng phân tích cú pháp .... Nhưng tôi bằng cách nào đó đã bỏ lỡ điều đó. Cảm ơn một lần nữa. –
TÌNH YÊU ví dụ 'set'! – Bart