我有以下来自服务器的字符串(作为对象的一部分):
...
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转换为数组(如何?)。
答案 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)来获取对象。