【发布时间】:2014-07-21 06:12:44
【问题描述】:
我已经使用 knockout.js 几个月了,只是意识到它在序列化我的模型时调用 ko.toJS 时会调用函数。
这可能会导致明显的问题,例如 infinite loop,如果调用具有副作用的函数,最坏的情况是会导致数据损坏。
这种行为在早期版本的 Knockout 中曾一度改变,但似乎 it was backtracked upon 是设计使然,因为有时有些人希望复制函数。
嗯,我从不这样做(我不认为我这样做),我真的很感激能够调用 toJS 的方法,它不会调用我的函数。
我知道我可以改用toJSON,但有时你真的想要toJS,在你想做这样的事情的情况下:
toJSON = () => // this is typescript syntax
{
var copy = ko.toJS(this);
// remove credit card details if not selected payment type
if (this.paymentType() != 'CreditCard')
{
delete copy.creditCardDetails;
}
return copy;
}
或者我将模型传递给需要对象的实用方法。
我想我最终不明白为什么我的视图模型上的函数调用是不可配置的,如果有一种简单的方法可以“猴子补丁”或创建一个新的 toJS2 函数,那么我真的很想能够做到这一点。
这个问题中有一些非常有用的信息,How can I use ko.toJs method without computed properties in knockout mapping?,但是如果我想保留对象而不是转换为字符串,我还没有找到解决方案。
【问题讨论】:
-
或者可能以某种方式指定函数以忽略带有下划线的
_incrementQty()不会被调用
标签: knockout.js knockout-mapping-plugin to-json