3

当我使用ko.mapping.toJSON它时,它会将我所做的任何更改转换为字符串,并且它们需要是数字。我尝试像这样使用自定义映射:

    var mapping = {
   'y': {
        update: function(options) {
                return parseFloat(options.data);
        }
    }
}

...但这只会将它们作为数字保留在页面的范围内。由于我使用它来更新由 HighCharts.js 提取的外部 JSON,因此即使在 toJSON 之后,数字也需要保持数字。

从较早的答案here我可以使用:

//override toJSON to turn it back into a single val
    mappedData.prototype.toJSON = function() {
       return parseInt(ko.utils.unwrapObservable(this.val), 10);  //parseInt if you want or not 
    };

......游泳效果很好。然而,这只是 JSON 中的单一值类型,所以我不清楚如何使用相同的覆盖。在这种情况下,我是否也需要创建一个全新的对象来执行此操作。还是他们的东西更简洁?

4

1 回答 1

6

每当您在输入中编辑一个值时,该值最终都会成为一个字符串。Knockout 从元素中读取新值,它始终是一个字符串。

如果您想保持数字化,请查看以下问题的答案:Knockout.js:时间输入格式和值限制,了解几种方法。如果您numericValue在答案中使用自定义绑定 ( ),则无需对映射选项执行任何其他操作。如果您使用这个numericObservable想法,那么您将需要使用映射选项来确保它正在创建这些特殊的可观察对象,而不仅仅是普通的可观察对象。

否则,您也可以继续使用toJSON覆盖。

于 2011-10-01T00:20:22.063 回答