我已经使用 knockout.js 几个月了,只是ko.toJS
在序列化我的模型时才意识到它在调用时调用了函数。
这可能会导致明显的问题,例如无限循环,如果正在调用具有副作用的函数,最坏的情况是会导致危险的数据损坏。
这种行为在早期版本的 Knockout 中曾一度改变,但似乎它被认为是设计使然,因为有时有些人希望复制功能。
好吧,我从不这样做(我不认为我这样做),我真的很感激一种能够调用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? 但是到目前为止,如果我想保留对象而不是转换为字符串,我还没有找到解决方案。