Я являюсь частью проекта, в котором ExtJs должен использоваться для разработки внешнего интерфейса.Бэкэнд-разработчики собираются предоставить API, и я должен его использовать.
Есть несколько API, которые возвращают JSON в формате ниже
{
"Entity": [
{
"id": 1,
"name": "Sunshine",
"placements": 3,
"next_meeting": "2019-03-14T16:29:00.48Z"
},
{
"id": 2,
"name": "Merlon",
"placements": 1,
"next_meeting": "2019-03-14T16:29:00.48Z"
},
{
"id": 3,
"name": "Mars",
"placements": 10,
"next_meeting": "2019-03-14T16:29:00.48Z"
},
{
"id": 4,
"name": "Moonlight",
"placements": 5,
"next_meeting": "2019-03-14T16:29:00.48Z"
}
],
"RecordCount": 4,
"IsSuccess": true,
"Unauthorized": false,
"ErrorInformation": {
"Message": null,
"Link": null
}
}
На данный момент я создаюотдельные модели, как показано ниже
ClientModel.js
Ext.define('ClientModel', {
extend: 'Ext.data.Model',
fields: [{
name: "id",
type: "int",
convert: null
},
{
name: "name",
type: "string"
},
{
name: "placements",
type: "int",
convert: null
},
{
name: "next_meeting",
type: "date",
dateFormat: 'm/d/Y',
convert: function(v, rec) {
return Ext.util.Format.date(v, 'm/d/Y');
}
}
],
proxy: {
type: "ajax",
url: "/api/Clients",
reader: {
type: "json",
rootProperty: "Entity",
totalProperty: "RecordCount",
successProperty: "IsSuccess"
}
}
});
В поисках лучшего подхода, поскольку все API возвращают ответ в заданной форме.
Как создать базовую модель, которая должна служитьв качестве родителя других моделей?
Я хотел бы разработать свою модель следующим образом:
Ext.define('ParentModel', {
extend: 'Ext.data.Model',
fields: [
{
name: 'Entity'
},
{
name: 'RecordCount',
type: 'int'
},
{
name: 'IsSuccess',
type: 'boolean'
},
{
name: 'Unauthorized',
type: 'boolean'
},
{
name: 'ErrorInformation'
}
]
});
Теперь, скажем, для API '/ API / клиентов' я получаю ответ, который изображаетКлиентская модель, поэтому поле Entity должно ссылаться или указывать на ClientModel.
Аналогично, допустим, у меня есть еще один api '/ api / comments', который изображает CommentModel, теперь поле сущности должно ссылаться или указывать на CommentModel.