簡體   English   中英

使用Knockout映射插件正確映射數組元素

[英]Correctly mapping array element using the Knockout mapping plugin

我有一個viewModel簡化后看起來像這樣:

var viewModel = function(){
  var self = this;
  self.selectedObject = ko.observable({});
  self.getUnit = function(){
    //get the selected object from the server side as json
    self.selectedObject(ko.mapping.fromJS(data,mapping));
  };
  self.addObjectMember = function(){
    self.selectedObject().objectMembers.push(new ObjectMemberViewModel(null, self.selectedObject()));
  self.save = function(){
    var data = ko.mapping.toJS(self.selectedObject);
    //ship data to server
  }

從服務器接收的數據包含一個名為objectMembers的數組,該數組內部具有一些屬性。 不同對象之間的屬性可能有所不同。

我的映射對象如下所示:

var mapping = {
  'objectMembers': {
    create: function(options){
      return new ObjectMemberViewModel(options.data, options.parent);
    }
  }
};

要查看我的問題,我將舉一個例子:

用戶加載頁面,然后獲取一個對象。 該對象在objectMembers數組中包含兩個元素。 然后使用ko.mapping.fromJS映射它們,一切正常。 我可以使用模型修改viewModel並更新viewModel。 然后,用戶單擊觸發addObjectMember函數的按鈕,將第三個條目添加到observableArray。 我也可以與此交互,並且對模型所做的任何更改都可以在viewModel中按預期方式看到。

當我單擊保存時出現問題。 如果我調試save方法,並檢查self.selectedObject的內容,則可以看到它包含了我想要的內容,但是映射回變量data的對象在objectsMembers數組中的最后一個元素為空對象( {} )。 其他兩個對象看起來就像我想要的那樣。

我想我知道為什么。 第一個對象的__ko_mapping__.mappedProperties包含它們最初映射時擁有的所有屬性。 但是最后一個有一個空的__ko_mapping__.mappedProperties ,因此我想沒有屬性被映射回去。

因此,我需要做以下其中之一:

  1. 將對象添加到addObjectMember上的數組時,我需要獲取__ko_mapping__.mappedProperties設置,以便在保存時將其映射回去。
  2. 映射回時,無論在__ko_mapping__.mappedProperties是否存在屬性,我都會將其包含在映射對象上的所有屬性。

我不知道該如何做任何不像是骯臟的hack的事情,因此這里的任何幫助將不勝感激。

我最終使用ko.toJS而不是ko.mapping.toJS ko.toJS並不關心__ko_mapping____ko_mapping__映射所有內容(包括__ko_mapping__ )。

這意味着它映射的內容比我需要的更多,但除此之外,它的工作還不錯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM