gpt4 book ai didi

javascript - knockout 映射 fromJS fromJSON 在集合中不起作用?

转载 作者:行者123 更新时间:2023-12-03 06:43:31 24 4
gpt4 key购买 nike

我的根 knockout 模型包含 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 具有所有正确的字段,包括 RoomProfile,在我添加房间配置文件数据之前将其设置为 null。

第二个 console.log 确认我的 ajax 方法确实返回了数据并且格式正确。

第三个 console.log 显示相同的 visitEntryToAdd,并且其上的 RoomProfile 仍然为空。

我能够通过执行以下操作来实现此目的:

visitEntryToAdd.RoomProfile(ko.mapping.fromJS(data));

但我不确定为什么它不能仅使用 fromJS 命令,因为它的用法。如果有人可以提供解释,我会将其标记为答案。

最佳答案

如果 visitEntryToAdd.RoomProfile 在映射之前为 null,则您实际上是在说 ko.mapping.fromJS(data, {}, null) 并且没有任何内容绑定(bind)新映射的数据到 View 模型。

您可以通过将访问条目上的 RoomProfile 初始化为 {} 而不是 null 来解决此问题,或者按以下方式执行映射:

ko.mapping.fromJS({RoomProfile: data}, {}, visitEntryToAdd);

这种方式映射将从 View 模型的根开始,并且其上的 RoomProfile 字段是可分配的。如果将字段初始化为 {} 有意义,那么它将起作用,因为 View 模型上的 RoomProfile 字段不会被替换,只有其上的字段会被更新,因此来自visitEntryToAdd -> RoomProfile 的链接被保留。

关于javascript - knockout 映射 fromJS fromJSON 在集合中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37846575/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com