我知道有一个函数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
。