【发布时间】:2016-10-17 05:25:40
【问题描述】:
我的根剔除模型包含一组 VisitEntries,每个条目上都有一个名为 RoomProfile 的对象。当用户创建访问条目(将房间添加到他们的访问列表)时,应该加载房间的配置文件数据并将其显示给该集合中的用户。但我无法更新关联的模型。我以前在其他领域做过这个没问题。我认为有一个问题,因为我在我的根 mappedModel 上制作了 VisitEntryToAdd 的副本,或者因为它在一个集合中。我不确定,但这些是我这样做时与其他时间的唯一区别。
mappedModel.addVisitEntry = function () {
var visitEntryToAdd = ko.mapping.fromJS(ko.mapping.toJS(mappedModel.VisitEntryToAdd));
$.ajax({
url: '/GetRoomProfileForVisit',
type: 'POST',
data: ko.mapping.toJSON({ Id: visitEntryToAdd.SelectedRoom.Id() }),
dataType: "json",
contentType: 'application/json; charset=utf-8',
success: function (data) {
if (data !== null) {
console.log("Checking entry before assigning room profile data: \n" + ko.mapping.toJSON(visitEntryToAdd));
console.log("Room Profile Data Loaded:\n" + ko.mapping.toJSON(data));
ko.mapping.fromJS(data, {}, visitEntryToAdd.RoomProfile);
console.log("Checking entry after assigning room profile data: \n" + ko.mapping.toJSON(visitEntryToAdd));
}
mappedModel.VisitEntries.push(visitEntryToAdd);
}
});
}
遍历上面的代码:
第一个 console.log 显示 visitEntryToAdd 具有所有正确的字段,包括在我添加房间配置文件数据之前它设置为 null 的 RoomProfile。
第二个 console.log 确认我的 ajax 方法确实返回了数据并且它的格式正确。
第三个console.log 显示相同的visitEntryToAdd,而上面的RoomProfile 仍然为空。
我能够通过这样做来完成这项工作:
visitEntryToAdd.RoomProfile(ko.mapping.fromJS(data));
但我不确定为什么它只使用fromJS 命令不起作用,因为它的用法。如果有人可以提供解释,我会将其标记为答案。
【问题讨论】:
-
这是一个错误吗:您在控制台记录一些未在您的代码示例中定义的
labVisitEntryToAdd? -
复制时出现抽象错误。
-
如果可能的话,请尝试通过删除 Ajax 代码来创建minimal reproducible example,并包含足够(但尽可能少)的示例数据,以及用于上下文的视图模型代码 / 进行制作可运行。
标签: javascript knockout.js knockout-mapping-plugin