[英]KnockoutJS - How to data-bind an observable that is created inside options extend
[英]How to bind nesting options in knockoutjs
我有一个基于淘汰赛的专辑编辑界面
相册的对象具有以下结构:
我创建了一个小提琴来展示我的工作及其问题 。
我认为问题出在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));
很好 :
什么是坏了 :
绑定=双向绑定(例如,在编辑歌曲名称时,曲目列表未更新)
我究竟做错了什么?
您说对了:您所做的方式,track属性(id,title等)并未创建为可观察对象,而只是创建为纯JavaScript原语。
我认为您有两种选择:
如果选择第一个,请查看映射插件文档 。
如果选择第二个,则可以像下面那样更改tracks属性的创建:
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
}
}))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.