我有一个基于淘汰赛的专辑编辑界面
专辑的对象有这样的结构:
我创建了一个fiddle来展示我的工作和问题。
我认为问题出在tracks: ko.observableArray(album.tracks)
:
var initialData = […];
var AlbumsModel = function(album) {
var self = this;
self.albums = ko.observableArray(ko.utils.arrayMap(album, function(album) {
return {
title: album.title,
image: album.image,
artists: ko.observableArray(album.artists),
date: album.date,
genres: ko.observableArray(album.genres),
composers: ko.observableArray(album.composers),
lyricists: ko.observableArray(album.lyricists),
tracks: ko.observableArray(album.tracks)
}
}));
self.lastSavedJson = ko.observable('')
self.save = function(formElement) {
self.lastSavedJson(JSON.stringify(ko.toJS(self.albums), null, 2));
};
};
ko.applyBindings(new AlbumsModel (initialData));
什么是罚款:
什么是破碎:
binding =双向绑定(例如,在编辑歌曲名称时,tracklist未更新)
我做错了什么?
答案 0 :(得分:1)
你是对的:你正在做的方式,轨道属性(id,title等)不是作为observables创建的,而只是作为普通的javascript原语。
我认为你有两个选择:
如果您选择第一个,请查看mapping plugin documentation。
如果您选择第二个,您可以更改track属性的创建,如下所示:
tracks: ko.observableArray(ko.utils.arrayMap(album.tracks,
function(track) {
return {
id: track.id,
title: ko.observable(track.title),
artists: track.artists,
date: track.date,
genres: track.genres,
composers: track.composers,
lyricists: track.lyricists,
lyrics: track.lyrics
}
}))
对于第二个版本,I modified your fiddle稍微测试一下。