私は、ユーザーがリストから1枚の写真を選択して、いくつかのプロパティを変更することができ、簡単なページを構築したいので、私はモデル構築されていた:Knockout.jsマッピング。ビューモデルの一部だけを更新するには?
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
関数が呼び出されると、そこに私はsetCurrent
、に結合パスをクリックし、ビューモデルとcurrentPhoto
を更新することができますが、問題ko.mapping.fromJS(jsObj, viewModel)
(私はソースから見ることができるように)電子が存在しますviewModelがルートモデルになることを確認します。 私は手動ですべての観測値を調べ、その値をリフレッシュしたり、rootModelをマップ解除したり、プロパティを設定してルートを更新することができますが、これを行うにはより複雑でエレガントな方法があると思います。
ありがとうございます。