An Ember Object Proxy and mixin that enables change buffering for controlled property updates.
ember-buffered-proxy is an Ember.js addon that provides a buffering proxy and mixin to temporarily hold property changes before applying them to the underlying content object. It solves the problem of needing to validate or batch changes in edit scenarios without immediately modifying the original data.
Ember.js developers building applications with forms, edit interfaces, or undo/redo functionality where temporary state management is required.
It offers a lightweight, convention-based solution integrated with Ember's object model, reducing custom change-tracking code and providing predictable APIs for buffering, applying, or discarding changes.
An Ember Proxy the enables change buffering
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Supports both a standalone BufferedProxy and a BufferedMixin for existing ObjectProxy instances, as shown in the README's usage examples with import statements and extend patterns.
Allows applying or discarding buffered changes for specific properties using optional key arrays, demonstrated in the code snippet with applyBufferedChanges(['email']) and discardBufferedChanges(['address']).
Provides shorter aliases like applyChanges() and discardChanges() for common operations, reducing boilerplate as highlighted in the README's section on convenient aliases.
Includes hasChanges and hasChanged methods to easily check for pending modifications, evidenced by the examples where buffer.get('hasChanges') returns true after setting properties.
Tightly coupled to Ember's object model and proxies, making it non-portable to other frameworks and adding dependency on Ember's compatibility, as noted in the version table requiring specific Ember versions.
Introduces an extra buffering layer that may slow down property access in large-scale applications, though the README doesn't address performance implications or optimizations.
Primarily handles top-level property buffering without built-in support for deep nested objects or arrays, which could require additional custom logic for complex data structures.