将给定格式的字符串转换为knockout observable数组

时间:2014-08-25 10:09:14

标签: arrays knockout.js

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

...
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应该是可观察数组(每个数组项应该有两个属性id& displayName)。稍后我将使用SelectValues下拉列表。

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

问题是我是否可以在客户端处理它(不改变服务器端的格式)?

我可能会将SelectValuesComputed创建为ko.computed并以某种方式将SelectValues转换为数组(如何?)。

1 个答案:

答案 0 :(得分:1)

首先,这是您的属性中的无效JSON字符串,请参阅documentation(属性名称应在引号中)。但是,如果您无法更改服务器代码,则可以使用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);
}

见工作demo。虽然这似乎是解决问题的最简单方法,但我强烈建议您获取有效的JSON字符串,而不是使用eval(或regexp)来获取对象。