Javascript knockoutjs undo ko.mapping.fromJS

Javascript knockoutjs undo ko.mapping.fromJS,javascript,knockout.js,Javascript,Knockout.js,我知道有一个函数ko.utils.unwrappbserable(),但它似乎根本没有打开由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.utils.unwrappbserable()
,但它似乎根本没有打开由
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.unwrobbservable

值得一提的是,自2.3.0以来,
ko.unwrap
作为
ko.utils.unwrobbservable
的较短同义词提供。啊哈!为什么我没有在文档中看到这一点!