ノックアウト監視可能配列に追加するコードがいくつかあります。監視可能配列をオブジェクトに変換し、新しいオブジェクトのシフトを解除してから、このオブジェクトをビューモデルにマッピングします。これは機能しますが、非常に遅いようです。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)]);
}
}
}
代理店がどのように見えるかについては、私のスクリーンショットを参照してください。
この監視可能な配列に追加する正しい方法は何ですか? 最新の値は変更を追跡するためのメカニズムであることを理解しているので、それを改ざんすべきではありませんか?