knockoutjs undo ko.mapping.fromJS

knockoutjs undo ko.mapping.fromJS

本文关键字:fromJS mapping ko undo knockoutjs      更新时间:2024-03-20

我知道有一个函数ko.utils.unwrapObserable(),但它似乎根本没有打开由ko.mapping.fromJS()映射的可观察对象:

console.log(listing);
listing = ko.utils.unwrapObservable(listing);
console.log(listing);

我得到以下输出:

Object { __ko_mapping__={...}, title=c(), remote_id=c(), more...}
Object { __ko_mapping__={...}, title=c(), remote_id=c(), more...}

我问这个问题的原因与另一个问题有关,基本上,列表是一个类的实例,它的方法引用了它的变量,问题是在列表映射到一个可观察对象之后,类方法会失败,因为变量变成了方法。

我的问题是,是否有函数可以撤消映射?

您需要的是ko.mapping.toJS函数(请参阅文档中的)。

它确实与ko.mapping.fromJS完全相反,因此它将具有可观测属性的对象变成了没有任何可观测的纯JavaScript对象:

console.log(listing);
listing = ko.mapping.toJS(listing);
console.log(listing);
Object { title="..,", remote_id="...", more...}

ko.mapping.toJS的实际实现是,它递归地遍历对象属性,并在每个属性上调用ko.utils.unwrapObservable