0

假设observableArray我的 viewModel 中有一个名为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一个observableArray,我将如何去做?

4

2 回答 2

1

您可以在对象中指定您希望 ko.mapping 插件映射为普通值的属性,如下所示:

var mapping = {
    'copy': ["propertyToCopy"]
}
var viewModel = ko.mapping.fromJS(data, mapping);

您需要为您定义的每个模型执行此操作。它可能非常乏味,并且取决于您的模型的性质,很可能首先会破坏插件的主要好处(不必重新定义您的数据模型客户端)。

于 2012-12-19T07:15:14.330 回答
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]);
        }
    }

有点丑陋的方法,但你应该从中得到大致的想法。

于 2012-12-18T22:13:00.720 回答