在我的打字稿视图模型类中,我对属性有以下结构:
objectChecks = {
objVal: {
customerValue: ko.observable(null),
exportValue: ko.observable(null),
myTimestamp1: ko.observable(null),
rfqStatusValue: ko.observable(null),
rfqCommentValue: ko.observable(null),
myTimestamp2: ko.observable(null),
termConditionValue: ko.observable(null),
indemnityValue: ko.observable(null),
myTimestamp3: ko.observable(null),
quoteOCMValue: ko.observable(null),
//checkpointValue: ko.observable(null),
dtReasonValue: ko.observable(null),
myTimestamp4: ko.observable(null)
},
objCom: {
termCondCommentValue: ko.observable(null),
quoteComm: ko.observable(null),
// checkpointComm: ko.observable(null),
}
};
我保存后,作为一个json进入一个字段,我无法在UI中更改值,就像系统从缓存内存更新到保存的值。
保存json数据:
var self = this;
//self.objectChecks;
// format json to ignore null values
var json = ko.toJSON(self.objectChecks, function (key, value) {
if (value == null || key === "__ko_mapping__" || key === "__proto__") {
return;
}
else if (value == "") {
return;
}
else {
return value;
}
});
从Json加载:
var jsonFormat = this.commentsAction.replace(/"/g, '"').replace(/(/g, '(').replace(/)/g, ')').replace(/\r\n/g, '\\r\\n').replace(/\t/g, '\\\\t').replace(/'/g, "'").replace(/#/g, '#').replace(/$/g, '$').replace(/%/g, '%').replace(/&/g, '&').replace(/*/g, '*').replace(/+/g, '+').replace(/,/g, ',').replace(/-/g, '-').replace(/./g, '.').replace(///g, '/');
ko.mapping.fromJSON(jsonFormat, {}, this.objectChecks);
查看示例:
<tr>
<td class="fl"><p>Terms & Conditions?</p></td>
<td class="fv"><select class="inputControlFlexControl" data-bind="options: termConditionField, value: objectChecks.objVal.termConditionValue, optionsCaption: 'Select...', event:{change: saveButton}"></select><span class="ui-icon ui-icon-help" style="display:inline" /></td>
<td><!--used only for structure--></td>
<td class="fl flu"><p>Requirement?</p></td>
<td class="fv fvu"><select class="inputControlFlexControl" data-bind="options: nuclearIndemnity, value: objectChecks.objVal.indemnityValue, optionsCaption: 'Select...', event:{change: saveButton}"></select><span class="myQuestCs" /></td>
</tr>
<tr>
<!-- <tr data-bind="visible: check13Selection()">-->
<td class="fl flu"><p>Comments</p></td>
<td class="fv fvu"><textarea class="iled inlineMLTxtEditorLinHeight" data-bind="value: objectChecks.objCom.termCondCommentValue, event:{change: saveButton}" style="width: 50%" /></td>
</tr>
知道可能产生此问题的原因吗?
经过测试,我发现问题来自于Json的负载:&#34;我改变值并更新到服务器上保存的值后运行的方法,所以我会添加一个标志,不再运行它?
答案 0 :(得分:0)
我的解决方案是添加一个用作标志的属性,因为这将限制每次从服务器获取保存的值:
saveFlag = ko.observable(0);
if (this.saveFlag() === 0) {
var jsonFormat = this.commentsAction.replace(/"/g, '"').replace(/(/g, '(').replace(/)/g, ')').replace(/\r\n/g, '\\r\\n').replace(/\t/g, '\\\\t').replace(/'/g, "'").replace(/#/g, '#').replace(/$/g, '$').replace(/%/g, '%').replace(/&/g, '&').replace(/*/g, '*').replace(/+/g, '+').replace(/,/g, ',').replace(/-/g, '-').replace(/./g, '.').replace(///g, '/');
ko.mapping.fromJSON(jsonFormat, {}, this.objectChecks);
this.preOrderChecks(true);
this.saveFlag(1);
$("#BTN_TB_TaskForm_MarkAsCompleted").hide();
if (epmcrm.step === '') {
this.stepStatus('Compliance Pre-Qualification');
}
}
else if (this.saveFlag() === 1) {
$("#BTN_TB_TaskForm_MarkAsCompleted").hide();
this.preOrderChecks(true);
}