假设我的viewModel中有一个名为observableArray
的{{1}},其中包含与此类似的数据...
movies
我知道我可以使用映射插件,并且每个属性都将成为[{
Id: 12345,
Title: 'Movie1',
Year: 2010,,
UserMovies: [{
Id: 8
IsWatched: false,
Rating: 3.5,
UserId: 'e1e9c075-1ded-4e7d-8d30-d5d1fbd47103'
}]
},{
Id: 12345,
Title: 'Movie2',
Year: 2010,,
UserMovies: [{
Id: 11
IsWatched: false,
Rating: 4,
UserId: 'e1e9c075-1ded-4e7d-8d30-d5d1fbd47103'
}]
}]
,但如果我只想使一个属性可观察,该怎么办呢。是否可以只observable
UserMovies
,我将如何做到这一点?
答案 0 :(得分:1)
您可以在对象中指定希望ko.mapping插件映射为普通值的属性,如下所示:
var mapping = {
'copy': ["propertyToCopy"]
}
var viewModel = ko.mapping.fromJS(data, mapping);
您需要为已定义的每个模型执行此操作。它可能非常繁琐,并且取决于您的模型的性质,可能首先打败插件的主要好处(不必重新定义您的数据模型客户端)。
答案 1 :(得分:0)
您可以尝试循环数组中的每个项目,将UserMovies
存储在临时变量中,使用可观察数组覆盖UserMovies
。像这样:
for (var i = 0; i < movies().length; i++) {
var tempUserMovies = movies()[i].UserMovies;
movies()[i].UserMovies = ko.observableArray();
for (var j = 0; j< tempUserMovies.length; j++) {
movies()[i].UserMovies.push(tempUserMovies[j]);
}
}
有点丑陋的方法,但你应该从中得到一般的想法。