我有一个viewmodel,它有一个BatchHistoryViewModel类型的knockoutObservableArray
使用以下映射选项
在constuctor中成功创建var mappingOptions = {
'batchHistories': {
create: function (options) {
return new BatchHistoryViewModel(options.data, dataContext);
},
key: function (batchHistory) {
return ko.utils.unwrapObservable(batchHistory.Id);
}
}
工作得很好,可观察数组在DOM上的表中正确显示
现在,当我尝试运行更新函数以从同一源获取相同的数据时,它不会更新DOM 我可以在控制台中观察observable并看到它正在使用正确的数据进行更新,但它没有在页面上更新
这是我的刷新功能
refresh() {
var self = this;
$.when(self.dataContext.getBatchHistories(0, "Any"))
.done(function (refreshedData) {
var mappingOptions = {
'batchHistories': {
create: function (options) {
return new BatchHistoryViewModel(options.data, null);
},
key: function (batchHistory) {
return ko.utils.unwrapObservable(batchHistory.Id);
}
}
};
self = ko.mapping.fromJS(refreshedData, mappingOptions);
这是.net MVC控制器返回的内容
var batchHistories =
new
{
batchHistories =
this.consoleRepository.GetBatchHistories(fromDate, status).ToList()
.Select(batchHistory => new
{
Id = batchHistory.Id,
DataMartName = batchHistory.DataMartName,
Name = batchHistory.Name,
LoadType = batchHistory.LoadType,
BatchDefinitionId = batchHistory.BatchDefinitionId,
SsisExecutionId = batchHistory.SsisExecutionId,
StatusId = batchHistory.StatusId,
Status = batchHistory.Status.Status,
StartDateTime = batchHistory.StartDateTime.SafeToString(),
EndDateTime = batchHistory.EndDateTime.SafeToString(),
})
.ToList()
};
return this.Json(batchHistories, JsonRequestBehavior.AllowGet);
我在fromJS上使用或不使用mapppingOptions尝试了它,我得到了相同的结果。
有什么想法吗?请询问更多代码是否有帮助。除非需要,否则我不想过多地重复这个问题。 谢谢!
答案 0 :(得分:0)
我做错了这是应用映射的正确方法
ko.mapping.fromJS(refreshedData, self );