數據訪問和同步標準JS庫:Orbit.js
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) 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!