[](https://travis-ci.org/mojo-js/bindable-collection.js)
npm install bindable-collection

bindable.Collection operates like arrays, except they're watchable if anything changes.
```
npm install bindable-collection --save-exact
#### Collection(source)
The constructor
`javascript`
var BindableCollection = require("bindable-collection");
var items = new BindableCollection([1, 2, 3]);
console.log(items.at(0));
console.log(items.at(1));
console.log(items.at(2));
console.log(items.source);
#### source
The source of the collection. This is an array.
#### reset(source)
Resets the source of the collection. You can also do this by calling set('source', array)
`javascript`
var BindableCollection = require("bindable-collection");
var items = new BindableCollection([1, 2, 3]);
console.log(items.source);
items.reset([4, 5, 6]);
console.log(items.source);
items.set("source", [7, 8, 9]);
console.log(items.source);
#### indexOf(item)
returns the index of an item
`javascript`
var BindableCollection = require("bindable-collection");
var items = new BindableCollection([1, 2, 3]);
console.log(items.indexOf(1));
#### value at(index)
returns an item at the given index
#### each(fn)
iterates through the collection. similar to array.forEach.
#### push(values...)
pushes items to the end of the collection.
#### unshift(values...)
unshifts items to the beginning of the collection.
#### splice(index, count[, newValues...])
removes items from the collection
#### value pop()
pops the last item off the collection
#### value shift()
removes the first item from the collection
#### Events
- insert - emitted when items are insertedupdate
- - emitted when the collection is updatedreset
- - emitted when the source has been resetremove
- - emitted when items have been removed
`javascript
var BindableCollection = require("bindable-collection");
var items = new BindableCollection([1, 2, 3]);
items.on("insert", function (result) {
console.log("insert ", result);
});
items.on("remove", function (result) {
console.log("remove ", result);
});
items.on("update", function (result) {
console.log("update ", result);
});
items.on("reset", function (result) {
console.log("reset ", result);
});
items.reset([2, 3, 4]);
items.splice(1, 2);
items.push(6);
items.pop();
items.shift();
``