2012-12-18 58 views
0

比方说,我有我的视图模型称为movies包含类似于此数据observableArray ...在observableArray使内部对象可观察

[{ 
    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但如果我只想使一个属性可观察怎么办?是否有可能制作UserMoviesobservableArray,我该怎么做?

回答

1

您可以在您需要的ko.mapping插件映射为简单的值,像这样你指定对象的属性:

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

您需要为您所定义的每个模型做到这一点。这可能非常单调乏味,取决于你的模型的性质,可能很好地打败了插件的主要优点(不必重新定义你的数据模型客户端)。

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]); 
     } 
    } 

有点丑陋的方法,但你应该从它得到的一般想法。

相关问题