Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/joeybaker/wheelhouse-model
https://github.com/joeybaker/wheelhouse-model
Last synced: 6 days ago
JSON representation
- Host: GitHub
- URL: https://github.com/joeybaker/wheelhouse-model
- Owner: joeybaker
- Created: 2013-09-27T20:27:18.000Z (over 11 years ago)
- Default Branch: master
- Last Pushed: 2013-09-28T00:37:07.000Z (over 11 years ago)
- Last Synced: 2024-04-25T13:20:48.306Z (9 months ago)
- Language: JavaScript
- Size: 117 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
wheelhouse-model
=======================[![NPM](https://nodei.co/npm/wheelhouse-model.png)](https://nodei.co/npm/wheelhouse-model/)
Using Backbone client-side and server-side is pretty sweet, you get the same, event-driven approach to data management on the server that's been so good on the client. But, there's a problem: when you're using the same models/collections in both environments, triggering a `model.save` from an event happens on both client an server, meaning that the server commits a change to the database, and the client tries to commit the same change at nearly the same instant. Conflicts! Oh Nos!
Wheelhouse-model solves this by adding an `only` option to the `save` method allowing the user to specify which environment the call will be triggered in.
## Install
`npm i --save wheelhouse-model`## Usage
### Requirements
* browserify
* lodash instead of the default underscore backbone dependency### Example
```js
// model.js
var wheelhouseModel = require('wheelhouse-model')module.exports = wheelhouseModel.extend({
// your model config
idAttribute: '_id' // overrides backbone's default 'id' to '_id' since wheelhouse only has a couchdb adapter right now.
})// view.js
…
this.model.save({attribute: 'new value'}, {
only: 'client' // possible values are 'client' || 'server'
})
…```
## API
All methods are the same as backbone defaults unless specified.### `idAttribute`
Overrides Backbone's default `'id'` to `'_id'`### `save(attributes [, options])`
The options object now takes an additional argument: `only`
#### `only: 'client|server'`
If on the server, and `only` is set to `'client'`, the model will `set` the values, and trigger all necessary validation and events, but will not attempt to sync on the server. Visa versa on the client.## Tests
You must have [grunt-cli](https://github.com/gruntjs/grunt-cli) installed: `sudo npm i -g grunt-cli`
`grunt test`_A note about tests. This is a really hard problem to test because a good test is something of a unit/integration test that spans server and client code. The tests are currently incomplete and don't really work._