A knockout observable array as hashmap
var item1 = {
id: ko.observable(1),
label: 'Item 1'
};
var item2 = {
id: ko.observable(2),
label: 'Item 2'
}
var collection = new KnockoutCollection([item1], { key: 'id' });
expect(collection.get(2)).to.be.undefined;
collection.add(item2);
expect(collection.get(2)).to.have.property('label', 'Item 2');
collection.remove(item1);
collection.remove(item2);
expect(collection.toArray()).to.have.length(0);
If you need direct access to the underlying ko.observableArray
you can use collection.items
. Use this only to bind, not to modify.
You can pass an array as items.
new KnockoutCollection(['my', 'array', 'items']);
If you want to manage an ko.observableArray
you can pass it as items
and set the option: reference
:
var items = ko.observableArray([item1, item2]);
var collection = new KnockoutCollection(items, { key: 'id', reference: true });
collection.remove(item1);
// items() will be [item2]
adds an item to the collection which is identified by the value of the (observable-)property with name options.key
.
The item is only added, if it isn't already contained in the collection
removes the item from the collection. If it isnt available in the collection nothing is done
returns the item with the value of the (observable-)property with name options.key
equal to keyValue
.
it will return undefined
if the collection does not contain the item.
checks if the item is contained in the collection.
You can use the length property as you would use it for an array:
var collection = new KnockoutCollection(['i1', 'i2']);
console.log(collection.length === 2); // is true
Removes all items from the collection
returns an array with all items of the collection. The array is a copy.