У меня есть код, в котором можно добавить к нокаутируемому наблюдаемому массиву. Я преобразовываю наблюдаемый массив в объект, не сдвигаю новый объект, а затем сопоставляю этот объект обратно с моделью представления. Это работает, но кажется очень медленным. Это занимает около 2-5 секунд или больше.
function addContact(office) { // Passing in object array of agency. We no it contains correct office and agency ID
// Assign observable data to new variable then remove old
// variable from mapping
var objAgency = ko.toJS(agency);
vm.agency.removeAll();
// Fill new object with empty strings and related data
var objContact = {
agencyID: office.agencyID._latestValue,
emailAddress: "",
firstName: "",
jobName: "",
office: "",
OfficeID: office.officeID._latestValue,
personID: "",
surName: "",
title: ""
}
// unshift where office ID match
for (i in objAgency[0].offices) {
if (!isNaN(i)) {
if (objAgency[0].offices[i].officeID === objContact.OfficeID) {
objAgency[0].offices[i].contacts.unshift(objContact); // At i remove one object
}
else {
}
}
}
vm.agency([ko.mapping.fromJS(objAgency[0])]);
}
Я попытался добавить в свой наблюдаемый объект вместо выполнения процесса преобразования и получил следующую ошибку:
Unhandled exception at line 9423, column 13 in http://localhost:13762/scripts/breeze.debug.js
0x800a01b6 - JavaScript runtime error: Object doesn't support property or method 'getProperty'
Этот код вызывает ошибку
for (i in agency._latestValue[0].offices._latestValue) {
if (!isNaN(i)) {
if (agency._latestValue[0].offices._latestValue[i].officeID = objContact.OfficeID) {
agency._latestValue[0].offices._latestValue[i].contacts._latestValue.unshift([ko.mapping.fromJS(objContact)]);
}
}
}
Посмотрите мой скриншот, как выглядит агентство:
Каков правильный способ добавления к этому наблюдаемому массиву? Насколько я понимаю, последнее значение - это механизм отслеживания изменений, поэтому мне не следует вмешиваться в это?