在将敲除值发布到服务器之前更改它们

时间:2014-03-20 13:37:07

标签: javascript jquery knockout.js

我们说我有这样的VM(price1到price100)......

var Item = {
    price1: ko.observable(),
    price2: ko.observable(),
    price3: ko.observable(),
    ...
    ...
    price100: ko.observable(),
    name: ko.observable()
}

但是在将它发布到我的服务器之前,我需要在每个单独的价格中用commmas替换所有的点,而不是" name"变量。

我不想改变这个领域本身。我使用ko.toJS(项目)......所以我想改变这个结果而不需要手动完成所有价格。

这可能吗?

1 个答案:

答案 0 :(得分:1)

如果您要一直使用JSON,那么您可以执行此处所述的操作:http://www.knockmeout.net/2011/04/controlling-how-object-is-converted-to.html

您可以向toJSON添加Item.prototype功能,例如:

Item.prototype.toJSON = function() {
    //if calling ko.toJSON this will already be a "clean" object, but if calling JSON.stringify, then it would not, so get a clean version anyways
    var clean = ko.toJS(this);

    for (var prop in clean) {
        if (clean.hasOwnProperty(prop) && prop.indexOf("price") > -1) {
              clean[prop] = clean[prop].toString().replace(".", ",");
        }
    }

    return clean;
}; 

然后,当你执行ko.toJSON(myItem)时,它会进行替换。

如果你不想一直到JSON,那么你基本上想要直接做同样的事情。所以,你真的可以调用上面的toJSON函数并取回你的干净对象。 var clean = myItem.toJSON();

示例:http://jsfiddle.net/rniemeyer/zX7Ld/