2013-06-05 67 views
0

我想每一個對象從我的類observablearray轉換,C#類knockout.js映射

我的模式是這樣的:

public class Project 
    { 
     public string Soid { get; set; } 
     public DateTime StartDate { get; set; } 
     public DateTime? EndDate { get; set; } 
     public string ProjectTitle { get; set; } 

     private List<SelectedMembersForTestimonialsModel> _selectedMembersForProject; 

     public List<SelectedMembersForTestimonialsModel> SelectedMembersForProject 
     { 
      internal set { _selectedMembersForProject = value; } 
      get { return _selectedMembersForProject ?? (_selectedMembersForProject = new List<SelectedMembersForTestimonialsModel>()); } 
     } 
} 

轉換全班observablearray ,,我試過這樣:

var RatingAndTestimonials = function() { 
    //Make the self as 'this' reference 
    var self = this; 

    self.projects = ko.observableArray([]); 

Load Data from server to self.projects 
//Function to Read All Modules datas 
    function GetRatingandTestimonialsData(module) { 
     $.ajax({ 
      type: "POST", 
      url: "Home.aspx/GetRatingandTestimonialsInfos", 
      data: "{module : '" + module + "'}", 
      dataType: "json", 
      contentType: "application/json", 
      success: function (response) { 
       self.PageLoading = ko.observable("none"); 
       $.each(response.d, function (i, data) { 
        self.projects(data.Projects); 
            }); 
      } 

     }); 
    } 

每個財產轉換從項目到observablearry,(稱爲專門嵌套列表:SelectedMembersForProject

我寫了下面的東西用ko.mapping

var rt = new RatingAndTestimonials(); 
ko.applyBindings(ko.mapping.fromJS(rt)); 

,但它不工作,任何人都可以解決我的問題?

+0

什t技術你在服務器端使用(Mvc4與控制器,ApiController,WCF,自制的處理程序)? 你可以發佈服務器響應流嗎? – Damien

+0

當然,http://postimg.org/image/4r00h82e9/我正在使用$ ajax方法調用C#webmethod(圖像是否回答您的問題?) – patel

回答

0

雖然你沒有說出究竟是什麼錯誤,但你並沒有將每個項目添加到視圖模型的數組中,而是將該屬性設置爲該項目。您需要使用推到每個項目添加到陣列中:

$.each(response.d, function (i, data) { 
    self.projects.push(data.Projects); 
}); 
+0

Paul,我只是想使用ko將嵌套列表轉換爲observablearry。映射 – patel

+0

您似乎沒有調用您的ajax服務來獲取數據,因此映射插件沒有任何要映射的數據。 –

+0

是的,我在打電話,我不能寫整個代碼:)在這裏 – patel

1

對於我的工作我先通過模型來我.cshtml視圖的畫面,所以:

@model Your.Namespace.Project 

然後,在<script>的.cshtml視圖

// serialize model to json 
    var data = @Html.Raw(new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(Model)); 

    // "Project" being the name of the knockout VM 
    var vm = new Project(data); 
    ko.applyBindings(vm); 

    // definition of project knockout VM 
    function Project(data) { 
     // Data 
     var self = this; 
     ko.mapping.fromJS(data, {}, self); 
    } 

現在所有的屬性都觀測,和你的名單觀察到的陣列