将给定格式的字符串转换为挖空可观察数组



我有以下来自服务器的字符串(作为对象的一部分(:

...
SelectValues: "[{displayName: "Not selected", id: 0},{displayName: "Client", id: 1},{displayName: "Industry", id: 2},{displayName: "Country", id: 3}]"
...

我正在使用映射插件:

var ItemModel = function (data) {
    var self = this;
    ko.mapping.fromJS(data, {}, self);
}

因此,将正确创建所有项目,但 SelectValues 除外。SelectValues 应该是可观察数组(每个数组项应该有两个属性iddisplayName(。稍后我将使用 SelectValues 进行下拉列表。

问题是它以String而不是Array返回。

问题是我是否可以以某种方式在客户端处理它(而无需更改服务器端的格式(?

我可能可以创建SelectValuesComputed作为ko.computed,并以某种方式将选择值转换为数组(如何?

首先,这是属性中的无效 JSON 字符串,请参阅文档(属性名称应用引号引起来(。但是,在无法更改服务器代码的情况下,您可以使用 eval 函数来获取对象,然后在映射中使用它,如下所示:

var ItemModel = function (data) {
    var self = this;   
    var mapping = {
        "SelectValues": {
            create: function(options){
                return ko.mapping.fromJS(eval(options.data));
            }
        }
    };
    ko.mapping.fromJS(data, mapping, self);
}

请参阅工作演示。尽管这似乎是解决问题的最简单方法,但我强烈建议您获取有效的 JSON 字符串,而不是使用 eval(或正则表达式(来获取对象。

最新更新