数据访问和同步标准JS库:Orbit.js
                 jopen
                 12年前
            
                    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)