Точно, посидев в IRC-канале sproutcore и поговорив с mauritslamers, он порекомендовал создать платформу для обработки всех взаимодействий с сервером для меня вручную.
Итак, я установил фреймворк под названием CoreIo, который содержит все мои модели, хранилище и источник данных.
Источник данных используется только для извлечения записей с сервера, т. Е.
fetch: function(store, query) {
var recordType = query.get('recordType'),
url = recordType.url;
if (url) {
SC.Request.getUrl(CoreIo.baseUrl+url)
.header({ 'Accept': 'application/json'})
.json()
.notify(this, '_didFetch', store, query, recordType)
.send();
return YES;
}
return NO;
},
_didFetch: function (response, store, query, recordType) {
if (SC.ok(response)) {
store.loadRecords(recordType, response.get('body'));
store.dataSourceDidFetchQuery(query);
} else {
store.dataSourceDidErrorQuery(query, response);
}
},
Тогда у инфраструктуры CoreIo есть методы создания для моих моделей, а именно:
CoreIo.createBrand = function (brand, client) {
var data = brand,
url = this.getModelUrl(CoreIo.Brand);
data.client_id = client.get('id');
SC.Request.postUrl(url)
.json()
.notify(this, this.brandDidCreate, client)
.send(data);
};
CoreIo.brandDidCreate = function (request, client) {
var json = request.get('body'),
id = json.id;
var ret = CoreIo.store.pushRetrieve(CoreIo.Brand, id, json);
var brand = CoreIo.store.find(CoreIo.Brand, id);
if (ret) {
client.get('brands').pushObject(brand);
}
};
Затем я бы вызвал эти «действия» для создания моих новых моделей, которые также установили бы отношения.