我在敲除无法正确更新我的视图时遇到问题......发生的情况是我进行了 ajax 调用以获取我的视图数据,然后使用敲除来呈现它。在随后的请求中,我进行 ajax 调用以获取视图数据,然后使用新内容更新页面。
问题是调用 2、3、4 等...该页面未使用新数据进行更新。我正在使用可能是问题的映射插件。
if (filterLogModel == null) {
filterLogModel = ko.mapping.fromJS(data);
ko.applyBindings(filterLogModel, document.getElementById("dvFilterLog"));
} else {
ko.mapping.fromJS(data, filterLogModel);
}
我认为这是正确的使用模式,但也许不是?
我已经检查过的事情: 1 - 进来的新数据不同 2 - 通过调试器运行,第一个请求确实通过 IF 块,后续请求通过 ELSE 块。
如果返回的数据不包含我的 html 的任何数据部分有条件
<div id="filterLogResults">
<!-- ko if: $data.length <= 0 -->
<p class="attention">There are no errors for this task.</p>
<!-- /ko -->
<!-- ko if: $data.length > 0 -->
<table class="tbl">
<thead>
<tr>
<th>Description</th>
<th>Value 1</th>
<th>Operator</th>
<th>Value 2</th>
<th>Corrective Action</th>
</tr>
</thead>
<tbody data-bind="foreach: $data">
<tr>
<td class="nowrap" data-bind="text:Description"></td>
<td class="nowrap" data-bind="text:Value1"></td>
<td class="nowrap" data-bind="text:OperatorName"></td>
<td class="nowrap" data-bind="text:Value2"></td>
<td class="main" data-bind="text:CorrectiveAction"></td>
</tr>
</tbody>
</table>
<!-- /ko -->
</div>
并且视图确实更新并告诉我没有结果......但是当有数据时,它就像显示缓存视图或其他内容,而不是新数据。
我注意到的另一件事。如果第一个请求包含一些数据。第二个请求不包含数据。第三个请求包含一些数据。- 在这种情况下,第三个请求将显示新数据,而不是第一个请求的数据。只有当一行中有 2 个请求具有视图未更新的数据时,才会出现这种情况。
有想法该怎么解决这个吗?
编辑:完整的 JS
function getFilterLogs(suppressErrors, callback) {
$("#filterLogResults").hide();
if (!g_objCommon.isBoolean(suppressErrors)) {
suppressErrors = false;
}
if (filterLogAjaxRequest != null) {
filterLogAjaxRequestAborted = true;
filterLogAjaxRequest.abort();
}
g_objCommon.showLoading();
filterLogAjaxRequest = $.ajax({
cache: false,
type: "GET",
url: absoluteRootPath + "api/Tasks/GetFilterLogs?id=" + g_nWorklistId,
contentType: "application/json",
success: function (data) {
filterLogAjaxRequest = null;
g_objCommon.hideLoading();
if (filterLogModel == null) {
filterLogModel = ko.mapping.fromJS(data);
ko.applyBindings(filterLogModel, document.getElementById("dvFilterLog"));
} else {
ko.mapping.fromJS(data, {}, filterLogModel);
}
if ($.isFunction(callback)) {
callback(data.length);
}
$("#filterLogResults").show();
$("#filterLogResults .tbl").show();
},
error: function () {
filterLogAjaxRequest = null;
g_objCommon.hideLoading();
if (!filterLogAjaxRequestAborted) {
if (!suppressErrors) {
g_objCommon.showErrorModal("There was an error loading the errors.", undefined);
}
if ($.isFunction(callback)) {
callback(0);
}
$("#filterLogResults .attention").show();
$("#filterLogResults .tbl").hide();
$("#filterLogResults").show();
}
filterLogAjaxRequestAborted = false;
}
});
}