子阵列的淘汰自定义映射

时间:2012-12-03 03:32:55

标签: knockout.js

我是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;
      };

1 个答案:

答案 0 :(得分:0)

如果您的数据已经过结构化,请考虑使用mapping插件将所有内容转换为observables / observableArrays

我认为这就是你要做的事。

如果您愿意,可以使用mappingOptions添加计算的可观察量。