数据访问和同步标准JS库:Orbit.js
jopen
11年前
Orbit.js 是一个标准库用于协调访问数据源,并保持它们的内容同步。Orbit提供了一个基础框架,用于在客户端应用程序构建高级功能比较:离线操作,维护和同步本地高速缓存,撤消/重做栈和特设的编辑环境。
目标:
-
Support any number of different data sources in an application and provide access to them through common interfaces.
-
Allow for the fulfillment of requests by different sources, including the ability to specify priority and fallback plans.
-
Allow records to simultaneously exist in different states across sources.
-
Coordinate transformations across sources. Handle merges automatically where possible but allow for complete custom control.
-
Allow for blocking and non-blocking transformations.
-
Allow for synchronous and asynchronous requests.
-
Support transactions and undo/redo by tracking inverses of operations.
-
Work with plain JavaScript objects.
// Create data sources with a common schema var schema = { idField: '__id', models: { planet: { } } }; var memorySource = new Orbit.MemorySource(schema); var restSource = new Orbit.JSONAPISource(schema); var localSource = new Orbit.LocalStorageSource(schema); // Connect MemorySource -> LocalStorageSource (using the default blocking strategy) var memToLocalConnector = new Orbit.TransformConnector(memorySource, localSource); // Connect MemorySource <-> JSONAPISource (using the default blocking strategy) var memToRestConnector = new Orbit.TransformConnector(memorySource, restSource); var restToMemConnector = new Orbit.TransformConnector(restSource, memorySource); // Add a record to the memory source memorySource.add('planet', {name: 'Jupiter', classification: 'gas giant'}).then( function(planet) { console.log('Planet added - ', planet.name, '(id:', planet.id, ')'); } ); // Log the transforms in all sources memorySource.on('didTransform', function(operation, inverse) { console.log('memorySource', operation); }); localSource.on('didTransform', function(operation, inverse) { console.log('localSource', operation); }); restSource.on('didTransform', function(operation, inverse) { console.log('restSource', operation); }); // CONSOLE OUTPUT // // memorySource {op: 'add', path: 'planet/1', value: {__id: 1, name: 'Jupiter', classification: 'gas giant'}} // localSource {op: 'add', path: 'planet/1', value: {__id: 1, name: 'Jupiter', classification: 'gas giant'}} // restSource {op: 'add', path: 'planet/1', value: {__id: 1, id: 12345, name: 'Jupiter', classification: 'gas giant'}} // memorySource {op: 'add', path: 'planet/1/id', value: 12345} // localSource {op: 'add', path: 'planet/1/id', value: 12345} // Planet added - Jupiter (id: 12345)