2012-12-03 25 views
0

我是Knockout.js的新手,我試圖根據工作歷史創建一個複雜的對象。淘汰兒童陣列的自定義映射

我目前能夠在數據 員工有位置哪個具有有經驗的項目,等等等等 雖然我能夠在數據傳遞和填充子對象通過,我相信要要做的是手動建立我的子對象,所以我可以附加方法和computedObservables。我只是不確定如何連接我的其他物體。 我是否爲每個循環寫一個或者是否有一些簡潔的淘汰賽魔術讓這個更簡單?

任何指導將不勝感激!

Namespace.viewModel = function (model) { 
       console.log('initViewCalled');   

       var memberVM = { 
        Id: ko.observable(model.Id), 
        FName: ko.observable(model.FName), 
        LName: ko.observable(model.LName), 
        Positions: ko.observableArray(model.Positions), 
       };    
      // computed goodness goes here 
       memberVM.FullName = ko.computed(function() { 
        return this.FName() + ' ' + this.LName(); 
      }, memberVM);// methods 
      this.addPosition = function() { 
       this.Positions.push({MemberId:this.MemberId }); 
      } .bind(this); 
      return memberVM; 
     }; 

     Namespace.position = function (model) { 
      var positionVM = { 
       EndDate: ko.observable(model.EndDate), 
       Description: ko.observable(model.Description), 
       HoursPerWeek: ko.observable(model.HoursPerWeek), 
       HourlyRate: ko.observable(model.HourlyRate), 
       MaxDate: ko.observable(model.MaxDate), 
       MinDate: ko.observable(model.MinDate), 
       MemberId: ko.observable(model.Id), 
       Name: ko.observable(model.Name), 
       PositionId: ko.observable(model.Id), 
       Summary: ko.observable(model.Summary), 
       SalaryEnd: ko.observable(model.SalaryEnd), 
       SalaryStart: ko.observable(model.SalaryStart), 
       StartDate: ko.observable(model.StartDate), 
       Title: ko.observable(model.Title), 
       Projects: ko.observableArray(model.Projects), // automapped... 
      }; 

      this.addProject = function() { 
       this.Projects.push({ MemberId: this.MemberId }); 
      } .bind(this); 

      return positionVM; 
     }; 

     Namespace.project = function(model) { 
      var projectVM = { 
       EndDate: ko.observable(model.EndDate), 
       Description: ko.observable(model.Description), 
       MemberId: ko.observable(model.Id), 
       Name: ko.observable(model.Name), 
       PositionId: ko.observable(model.Id), 
       StartDate: ko.observable(model.StartDate), 
       Experiences: ko.observableArray(model.Experiences) // auto-mapped 
      }; 

      this.addExperience = function() { 
        this.Experiences.push("New Experience"); 
       }.bind(this); 

      return projectVM; 
     }; 

回答

0

如果您的數據進來已經結構化的,可以考慮使用mapping插件,一切都轉化爲observables/observableArrays

我認爲這就是你想要做的。

使用mappingOptions可以添加計算的observables,如果你願意。

+0

嗨馬特,謝謝你的迴應。我已經通過mappingOptions映射了數據。但是,我期望做的是將行爲添加到這些子孫後代對象,例如添加,刪除以及使某些子行爲可觀察。我對knockout的理解(有限的)是observableArray中的項目本身是不可觀察的。如果有一種方法可以使用mappingOptions +注入非常棒的自定義行爲併爲我節省大量輸入,您是否知道我可以在哪裏看到一個示例? –