отмечу 2 вещи. Прежде всего, вы объявляете observableArray без пустого массива в нем, это может выглядеть как простой случай, но у knockout есть проблема, связанная с объявлениями массивов, по крайней мере до некоторой версии. Поэтому перейдите к следующему:
this.contacts.push({
firstName: "",
lastName: "",
phones: ko.observableArray([]) // here
});
Также есть причина, по которой вы определяете self=this;
, но вы никогда ее не используете. Перепишите свой код так:
var contactsModel = function ()
{
var self = this;
self.contacts = ko.observableArray([]);
self.addContact = function ()
{
self.contacts.push({
firstName: "",
lastName: "",
phones: ko.observableArray([])
});
};
self.deleteContact = function (contact)
{
this.contacts.remove(contact);
};
self.addNumber = function (contact)
{
contact.phones.push({
type: "",
number: ""
});
};
self.deleteNumber= function (phone)
{
$.each(self.contacts(), function () { self.phones.remove(phone) })
};
}