ノックアウトが期待どおりに機能しません。私のインターフェースです。私のミスだと思います。しかし、私はそれを理解することはできません。
ジャンルのトラックが含まれるジャンルのアルバムがあります。
var initialData = [{
title: 'Danny',
genres: [
{id: 21,
title: 'Noise'},
{id: 22,
title: 'EBM'}],
tracks: [
{title: 'Pony',
genres: [
{id: 21,
title: 'Noise'},
{id: 22,
title: 'EBM'}]},
{title: 'Hungry',
genres: [
{id: 21,
title: 'Noise'},
{id: 22,
title: 'EBM'}]}
]
}];
アルバムのジャンルからトラックのジャンルへの一方向の同期を作成したい:
- アルバムにジャンルを追加すると、このジャンルがすべてのトラックに追加されます。
- アルバムからジャンルを削除すると、このジャンルはすべてのトラックから削除されます。
- トラックにジャンルを追加すると、このジャンルはこのトラックにのみ追加されます。
- トラックからジャンルを削除すると、このトラックからのみこのジャンルが削除されます。
私の同期は、次の関数で正常に動作します (1 つのケースを除く)。
self.addGenre = function(album) {
var id = rand(),
item = {
id: id,
title: ' genre #' + id
};
album.genres.push(item);
if (album.tracks()) {
$.each(album.tracks(), function (index, track) {
track.genres.push(item);
});
}
};
self.removeGenre = function(genre) {
$.each(self.albums(), function() {
this.genres.remove(genre);
if (this.tracks()) {
$.each(this.tracks(), function (index, track) {
track.genres.remove(genre);
});
}
});
};
例外は、デフォルト (ノイズ、EBM、上記の initialData を参照) ジャンルをアルバムから削除する場合です。うまくいきません。
このケースを示すためにjsFiddleを作成し、console.log()
デバッグするために多くのことを含めました