将Knockout数组转换或映射到对象

时间:2013-12-01 15:31:14

标签: knockout.js

我有一个Knockout可观察数组,内部结构如下所示,

property: "Email"
value: "name@email.com"

我需要将它转换为像这样的淘汰模型对象,

var obj;
obj.Email ="name@email.com";

在Knockout中有没有一种简单的方法来实现这一目标?

提前致谢

2 个答案:

答案 0 :(得分:0)

您可以创建可在视图模型中使用的可重用模型。这类似于在C#中使用类来创建具有公共属性的对象。

function objectModel(item) {
    var self = this;
    self.Name = ko.observable(item.name);
    self.Description = ko.observable(item.description);
}

可以像 -

那样调用
var object = {
    name: 'John',
    description: 'a person'
}

var john = new objectModel(object);

也可以通过参数而不仅仅是对象来完成 -

function objectModel(name, description) {
    var self = this;
    self.Name = ko.observable(name);
    self.Description = ko.observable(description);
}

var john = new objectModel('John', 'a person');

答案 1 :(得分:0)

当然,将一个对象映射到另一个对象的最佳方法是通过knockout的实用函数,arrayMap ...例如,如果你有你的数组对象......

var thisArray = [ 
    { property: 'Email', value: 'name@email.com'}, 
    { property: '', value: ''}... 
];

你还有一些你要映射到的其他对象类型......

var newObject = function(email) { 
    var self = this;
    self.Email = email;
};

就像......一样简单。

ko.utils.arrayMap(thisArray, function(arrayItem) { 
    if(arrayItem.property === 'Email')
        return new newObject(arrayItem.value);
});

返回一个新的newObject数组。