2012-07-28 128 views
0

我已經申請綁定以下視圖模型如何使用基因敲除映射?

var groupDeleteViewModel = { 
     group: { Id: ko.observable(), Name: ko.observable(), Members: ko.observableArray() }, 
     load: function (item) { 
      debugger 

     }, 
     remove: function (item) { 
      groupDeleteViewModel.group.Id(item.Id()); 
      groupDeleteViewModel.group.Name(item.Name()); 
      groupDeleteViewModel.group.Members(item.Members()); 
      $("#groupDelete").show(); 
     }, 
     cancel: function() { 
      $("#groupDelete").hide(); 
     } 
    } 

remove函數加載與已在項目被傳遞給刪除功能的數據視圖。

<div id="groupDelete" class="pop-window filter-view"> 
    <h2> 
     Delete Group 
    </h2> 
    <table> 
     <tr> 
      <th> 
       Name 
      </th> 
      <td> 
       <span data-bind="text:group.Name" /> 
      </td> 
     </tr> 
     <!--ko foreach: group.Members--> 
     <tr> 
      <th> 
      </th> 
      <td> 
       <div data-bind="text:Name" class="grey-border"> 
       </div> 
      </td> 
      <td> 
      </td> 
     </tr> 
     <!--/ko--> 
    </table> 
    <span class="centeralign"> 
     <input type="button" value="Delete" data-bind="click: remove" class="delete" /> 
     <input type="button" value="Cancel" data-bind="click: cancel" /> 
    </span> 
</div> 

我不想讓項目的每個元素映射到的每個元素groupDeleteViewmodel.group。我在代碼中的許多其他地方也做過這樣的事情,代碼非常混亂。我想用ko.mapping插件來做同樣的事情。

直到現在我曾嘗試是 -

remove:function (item){ 
      var data = ko.mapping.toJS(item); 
      ko.mapping.fromJS(data, groupDeleteViewModel.group); 
      $("#groupDelete").show(); 
} 

但是,這是行不通的。我真的不知道爲什麼。它應該理想地工作。 有人可以告訴在這種情況下使用ko.mapping的正確方法是什麼?

謝謝。

回答

1

映射插件正在尋找已存在於groupDeleteViewModel.group中的映射數據,但它找不到它,因爲您沒有使用映射插件初始化groupDeleteViewModel.group。 因此,而不是像你初始化組所做的:

group: { Id: ko.observable(), Name: ko.observable(), Members: ko.observableArray() } 

初始化使用映射插件吧:

group: ko.mapping.fromJS({ Id: undefined, Name: undefined, Members: [] }) 

這是我用你的代碼擺弄周圍:fiddle

+0

你是最棒的!萬分感謝。我只是想知道這是否也在他們的網站上? – Tushar 2012-07-28 17:01:41

+1

他們說:'要通過映射插件創建一個視圖模型,用上面代碼中的viewModel的創建替換爲ko.mapping.fromJS函數,然後:'然後,每當您從服務器接收到新數據時,您可以通過再次調用ko.mapping.fromJS函數一步更新viewModel上的所有屬性。他們應該更清楚一點 – antishok 2012-07-28 20:13:34