I'm working on an MVVM web app using Knockout.js, require.js etc. The problem is that I can't access items within a property (of type observable array) in my viewmodel.
Sample contract model:
define('model.contract', ['ko'],
function (ko) {
var Contract = function () {
var self = this;
self.id = ko.observable();
self.subject = ko.observable().extend({ required: true });
self.shoppingItems = ko.observableArray();
};
return Contract;
});
Sample view model:
define('vm.contract', ['ko'],
function (ko) {
var contract = ko.observable(), // Is initialised as viewmodel activates
deleteCmd = function () {
var selectedId = getSelectedId(),
deletedId = contract.shoppingItems.remove(function (item) { return item.id === selectedId; });
alert('Item ' + deletedId[0].id + ' was deleted!');
};
return {
contract: contract,
deleteCmd: deleteCmd
};
});
Sample view:
<div data-bind="template: {name: shoppingItemTemplate, foreach: contract().shoppingItems}"></div>
<button data-bind="click: deleteCmd">Delete Selected</button>
All I need to access in viewmodel is contract.shoppingItems
and all I get is undefined.