2012-02-25 88 views
0

我想建立簡單的頁面,用戶可以從列表中選擇一張照片,並修改一些屬性,所以我不得不建立的模型: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函數調用,那裏我可以更新currentPhoto與查看模型,點擊綁定通過setCurrent,,但有問題ko.mapping.fromJS(jsObj, viewModel)(從我可以看到從源)e xpecting該viewModel將根模型。 我知道我可以手動檢查所有觀測值並刷新它們的值,或者取消映射rootModel,設置屬性然後更新根目錄,但我相信有更復雜和更優雅的方式來做到這一點。

謝謝。

回答

1

將您當前的照片設置爲可觀察的,然後您可以使用map以JSON細節加載觀察點。

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

這裏有一個工作的jsfiddle證明:

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