2012-02-25 14 views
0

私は、ユーザーがリストから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をマップ解除したり、プロパティを設定してルートを更新することができますが、これを行うにはより複雑でエレガントな方法があると思います。

ありがとうございます。

答えて

1

現在の写真を観測可能なものとして設定し、マップを使用してJSONの詳細で観測値を読み込むことができます。ここで

self.currentPhoto(ko.mapping.fromJS(data)); 

は実証する作業JSFiddleです:

http://jsfiddle.net/jearles/wgZ59/7/

関連する問題