ユーザーがリストから1枚の写真を選択していくつかのプロパティを変更できるシンプルなページを作成したいので、モデルを作成しました:
model = {
newPhotos: [],
currentPhoto: {
id: 0,
description: ""
},
setCurrent: function (photo, e) {
ko.mapping.fromJS(ko.mapping.toJS(photo), viewModel.currentPhoto);
}
}
およびマークアップ:
<div class="content" data-bind="foreach: newPhotos">
<div class="photo" data-bind="click: $parent.setCurrent">
<div class="frame" data-bind="img: imageSrc">
</div>
</div>
</div>
<div class="edit-area" data-bind="with: currentPhoto">
<canvas id="image-edit" />
<textarea class="multi-line" name="PhotoDesc" data-bind="value: description"></textarea>
</div>
主なアイデアは、ユーザーが写真をクリックすると、setCurrent
関数が呼び出され、そこでcurrentPhoto
バインディングをクリックして渡されるビューモデルで更新できるということですがsetCurrent
、ビューモデルがルートモデルになることを期待して(ソースからわかるように)問題があり ます。すべてのオブザーバブルを手動で調べて値を更新するか、rootModel のマッピングを解除し、プロパティを設定してからルートを更新できることはわかっていますが、これを行うにはもっと複雑でエレガントな方法があると思います。ko.mapping.fromJS(jsObj, viewModel)
ありがとうございました。