gpt4 book ai didi

javascript - knockoutjs 使用嵌套数组映射自定义对象

转载 作者:行者123 更新时间:2023-12-03 11:26:36 25 4
gpt4 key购买 nike

我想将此 json 映射到自定义对象。问题是项目不是 typeof Item 对象而是普通对象。我在这里缺少什么?

你可以在这里测试:http://jsfiddle.net/5jhpE/

var json = [
{
id: 1,
items: [
{id: 1, name: 'item1'},
{id: 2, name: 'item2'},
{id: 3, name: 'item3'}
]
},
{
id: 2,
items: [
{id: 4, name: 'item4'},
{id: 5, name: 'item5'},
{id: 6, name: 'item6'}
]
},
]

function Data(data) {
ko.mapping.fromJS(data, {}, this);
}

function Item(data) {
ko.mapping.fromJS(data, {}, this);
}
var map = {
create: function(options) {
return new Data(options.data);
},
items: function(options) {
return new Item(options.data);
},
}

var res = ko.mapping.fromJS(json, map);

输出:

console.log(res());
[Data, Data]
--
console.log(res()[0].items());
[Object, Object, Object] <-- Here I want to have [Item, Item, Item]

最佳答案

我已经以这种方式更改了您的映射器选项

var map = {
'items': {
create: function(options) {
return new Item(options.data);
}
}
}

看起来不错;你能试试吗?

如果您需要:jsfiddle控制台输出是你想要的[Item, Item, Item]


我允许添加一个小建议:如果您需要以这种方式测试 typeof:

typeof res()[0].items()[0]

注意,这可能很棘手!

为了避免任何问题,我通常以这种方式声明 Item viewModel:

function Item(data) {
var self = this;
self.myType = 'item';
ko.mapping.fromJS(data, {}, this);
}

所以你可以简单地测试,例如:

if('item' === res()[0].items()[0].myType) {
//do something...
}

这个“myType”技巧是前段时间在 stackoverflow 中建议的:我会在找到帖子后立即在此处发布链接

关于javascript - knockoutjs 使用嵌套数组映射自定义对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16087415/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com