Я пытаюсь заставить ExtJ работать с бэкендом, на котором работают службы WCF RIA с включенной конечной точкой JSON.Бэкэнд, который у меня есть, использует GetXXX для чтения данных и CommitChanges для создания / обновления / удаления данных.Он также не имеет стандартного формата сообщений ExtJ, поэтому у меня есть класс хранилища, определенный следующим образом:
function cloneObject(src, dst) {
for (var key in src)
{
dst[key] = src[key];
}
return dst;
}
Ext.define('MyApp.store.Items', {
extend: 'Ext.data.Store',
model: 'MyApp.model.Tax',
autoLoad: true,
autoSync: true,
proxy: {
type: 'ajax',
api: {
read: '/MyApp/MyAppWeb-Web-MyAppDomain.svc/JSON/GetItems',
update: '/MyApp/MyAppWeb-Web-MyAppDomain.svc/JSON/SubmitChanges',
create: '/MyApp/MyAppWeb-Web-MyAppDomain.svc/JSON/SubmitChanges',
destroy: '/MyApp/MyAppWeb-Web-MyAppDomain.svc/JSON/SubmitChanges'
},
reader: {
type: 'json',
root: 'GetItemsResult.RootResults',
successProperty: null,
totalProperty: 'GetItemsResult.TotalCount'
},
writer: {
type: 'json',
root: 'changeSet',
currentOperation: null,
getRecordData: function(record) {
var changeSet = [];
var entity = {
Id: 0,
Operation: 3,
Entity: {
__type: 'Items:#MyApp.Web'
},
OriginalEntity: {
__type: 'Items:#MyApp.Web'
}
};
cloneObject(record.data, entity.Entity);
cloneObject(record.raw, entity.OriginalEntity);
changeSet.push(entity);
return changeSet;
}
}
}
});
Как вы могли, чтобы приспособиться к формату конечной точки Microsoft JSON, мне пришлось переопределить getRecordData и создать собственный объект JSON.Я могу заменить функцию cloneObject на функцию слияния, верно?(Я все еще новичок в ExtJ, поэтому, может быть, я пытаюсь «изобрести велосипед» здесь.
Он работает более или менее, как ожидается, для обновления, однако для создания и удаления мне нужносоздайте немного другой формат сообщения. Другой код операции и нет необходимости отправлять OriginalEntity. Однако внутри getRecordData у меня нет информации о том, какая операция выполняется. Так что вопрос № 1
Каков наилучший подход здесьПереопределить также метод «write» или есть другой способ?
Вопрос № 2. После любого обновления стандартный класс хранилища будет вызывать Reader для анализа ответа, но ответ на обновление сильно отличается от ответа для GetItems.и я не знаю, как с этим справиться.
Есть ли какие-либо предложения или ссылки для ознакомления о том, как связать ExtJ и доменные службы?