我知道有一个函数ko.utils.unwrapObserable()
但它似乎没有打开由ko.mapping.fromJS()
映射的observable:
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...}
我要求的原因与另一个question有关,基本上是列表的一个实例,它有方法引用它的变量,问题是在列表之后映射到一个observable,类方法将失败,因为变量成为方法。
我的问题是,是否有一个函数可以撤消映射?
答案 0 :(得分:3)
您需要的是ko.mapping.toJS
功能(请参阅documentation)。
它与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
。