2015-10-19 61 views
0

我有一個服務器的數據,如下。添加額外的對象屬性來敲除映射

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': '' 
 
}]

+0

你試過self.StudentProfile()[指數] .Grade = ko.observable(數據);而不是self.StudentProfile()[index] .Grade(data); ? –

回答

3

您可以使用

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

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