数据访问和同步标准JS库:Orbit.js

jopen 10年前

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)

项目主页:http://www.open-open.com/lib/view/home/1390181638586