數據訪問和同步標準JS庫:Orbit.js

jopen 12年前發布 | 17K 次閱讀 Orbit.js JavaScript開發工具包

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.baiduhome.net/lib/view/home/1390181638586

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!