将额外的对象属性添加到knockout映射

时间:2015-10-19 14:53:57

标签: javascript ajax knockout.js

我有来自服务器的数据,如下所示。

var data = [{
  'Name': 'David',
  'Class': '2A'
}, {
  'Name': 'Vincent',
  'Class': '2B'  
}]

假设我检索数据并使用ko.mapping.fromJS映射它。但是,我想在映射后使数据由另一个属性名称Grade组成。怎么能实现这一目标?这是因为通过另一个ajax调用检索了属性等级的值,并且应该事先定义它。

function MyViewModel() {
  var self = this;
  self.StudentProfile = ko.observableArray([]);
  
  self.GetStudentProfile = function() {
    $.ajax({
       ..
       ..
       success: function(data) {
          ko.mapping.fromJS(data.StudentProfile, {}, self.StudentProfile);
          // data after mapping 
          $.each(self.StudentProfile, function (index, value) {
            $.ajax({
                ..
                ..
                success: function(data) {
                   self.StudentProfile()[index].Grade(data);
                }
            });
          }
       }
    })
  }
}

// data after mapping
var data = [{
  'Name': 'David',
  'Class': '2A',
  'Grade': ''
}, {
  'Name': 'Vincent',
  'Class': '2B',
  'Grade': ''
}]

1 个答案:

答案 0 :(得分:3)

您可以使用

var options = {
    create: function(options){
        options.data.Grade = ko.observable("");
        return options.data;
    }
}

ko.mapping.fromJS(data.StudentProfile, options, self.StudentProfile);