Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/jakejarrett/model
:scream_cat: 350 byte model inspired by Backbone's Model
https://github.com/jakejarrett/model
javascript model
Last synced: 3 days ago
JSON representation
:scream_cat: 350 byte model inspired by Backbone's Model
- Host: GitHub
- URL: https://github.com/jakejarrett/model
- Owner: jakejarrett
- Created: 2017-06-14T07:18:51.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2017-06-14T21:57:35.000Z (over 7 years ago)
- Last Synced: 2024-11-02T00:22:49.902Z (about 2 months ago)
- Topics: javascript, model
- Language: JavaScript
- Homepage:
- Size: 10.7 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Model
* **Tiny** Unminified filesize is ~350 bytes
* **Extensible** Its a small class that you can easily extend with ES6
* **Easy to use** Simply call getters & setters## Notice
Be aware, this project is only written for ES6+ clients at the moment.For a list of supported browsers, check the [mdn browser compatability list](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Classes#Browser_compatibility) for ES6 classes
If you require any eventing etc, you can extend the class & bake in your own events, or try out another model system ([backbone-model](https://www.npmjs.com/package/backbone-model) is avaliable as a standalone module on npm)
## API
### ES6
```js
// Import the dependency
import Model from '@jakejarrett/model';// Initialize the model with some values
const MyModel = new Model({ username: 'jake', id: 0 });// Get the current username
MyModel.get('username'); // returns "jake"// Lock the current state of the model
const model = MyModel.freze();// Updates the model
MyModel.set('username', 'not jake');// Model & frozen model are not the same
MyModel.get('username') === model.username; // False```
## Documentation
### get
The `get` function takes a **string** parameter.It returns either `undefined` if the value could not be found, or the value you stored under that key.
```js
MyModel.set('hello', 'world')// Returns 'world'
MyModel.get('hello')
```### set
The `set` value takes 2 paramaters
The first being a **string** parameter, which is used for the `get` lookup.
The second being any type you wish to set.
```js
MyModel.set('hello', {
world: {
nested: 'objects'
}
});
```### freeze
A simple function that returns a "frozen" object (Think diverged)Useful for state comparison & preventing mutation of your object reference
```js
MyModel.set('user', { name: 'jake', id: 0 });const divergePoint = MyModel.freeze();
MyModel.set('user', { name: 'not jake', id: 1 });
// Will fail
MyModel.get('user').name === divergePoint.user.name;```
### isNew
A simple function to check if the model is new (the existence of the id attribute)```js
MyModel.isNew(); // trueMyModel.set('id', 0);
MyModel.isNew(); // false
```