What is the "preferred" way of creating data sources (I'm using SmartClient 10) in general? So far I'm creating a BaseDataSource class, extending the default RestDataSource class and for each entity I subclass this class to set the field configuration and data URL. After that I create a global instance via an ID. In a lot of examples I see only the usage of the global instance (so for all places in an application using a customers data source, it seems like the same instance is used. I guess this is done to have automatic data binding, but I wonder if there's downsides to this.
So this is what I have:
So, I might remove the creation of the entity specific subclass and create instances instead of them (thus combining the last two steps). I don't really like the idea of working with the IDs to create global instances, but it does help in creating simpler code.
So this is what I have:
Code:
// create a base class that sets up properties to talk with a RubyOnRails back-end
isc.defineClass('BaseRestDataSource', isc.RestDataSource).addProperties({
dataFormat: 'json',
operationBindings: [
{ operationType: 'fetch', requestProperties: { httpMethod: 'GET' } },
{ operationType: 'add', requestProperties: { httpMethod: 'POST' } },
{ operationType: 'update', requestProperties: { httpMethod: 'POST', params: { '_method': 'PUT' } } },
{ operationType: 'remove', requestProperties: { httpMethod: 'POST', params: { '_method': 'DELETE' } } }
],
sendMetaData: false,
transformRequest: function (request) {
if (request.operationType === 'fetch') {
// check if paging is enabled
if ((request.startRow !== undefined) && (request.endRow !== undefined)) {
request.params = isc.addProperties({}, request.params, {
offset: request.startRow,
limit: request.endRow - request.startRow
});
}
} else {
request.data = isc.addProperties({}, request.data, {
authenticity_token: METADATA.authenticity_token
});
}
return this.Super('transformRequest', arguments);
}
});
// create a entity specific subclass
isc.defineClass('CustomersDataSource', isc.BaseRestDataSource).addProperties({
dataURL: '/api/customers',
fields: [
...
]
});
// create a global instance
isc.CustomersDataSource.create({
ID: 'customers'
});
Comment