2014-04-09 59 views
0

我有從SIGNALR中的HUB返回的以下對象,我想將它映射到一個對象作爲視圖模型在淘汰賽中使用。問題映射陣列與挖空映射

[{"Aprover":{"CurrentTask":null,"UserID":3,"MembershipKey":"admin","Name":"admin","StartCurrentTask":null,"TotalWorkSeconds":0},"Comments":[],"Creator":{"CurrentTask":null,"UserID":3,"MembershipKey":"admin","Name":"admin","StartCurrentTask":null,"TotalWorkSeconds":0},"ParentTask":null,"Project":null,"Steps":[{"StepDescription":"sdfsdfsdfsdf","StepID":1,"IsComplete":false,"IsValidated":false}],"TaskCategory":null,"UserAssigned":{"CurrentTask":null,"UserID":3,"MembershipKey":"admin","Name":"admin","StartCurrentTask":null,"TotalWorkSeconds":0},"ID":5,"Date":null,"Priority":0,"Title":"sdfsdf","Description":"","UnitTestName":null,"Status":0,"StepsText":"sdfsdfsdfsdf\n","StatusText":"Active"},{"Aprover":{"CurrentTask":null,"UserID":3,"MembershipKey":"admin","Name":"admin","StartCurrentTask":null,"TotalWorkSeconds":0},"Comments":[],"Creator":{"CurrentTask":null,"UserID":3,"MembershipKey":"admin","Name":"admin","StartCurrentTask":null,"TotalWorkSeconds":0},"ParentTask":null,"Project":null,"Steps":[{"StepDescription":"dfgdfg","StepID":2,"IsComplete":false,"IsValidated":false}],"TaskCategory":null,"UserAssigned":{"CurrentTask":null,"UserID":3,"MembershipKey":"admin","Name":"admin","StartCurrentTask":null,"TotalWorkSeconds":0},"ID":6,"Date":null,"Priority":0,"Title":"dfdd","Description":"","UnitTestName":null,"Status":0,"StepsText":"dfgdfg\n","StatusText":"Active"}] 

我使用此自動地圖:

Tasks = ko.mapping.fromJSON(res) 

解析度=上述目的;

問題是無論我嘗試什麼,任務總是一個空對象,所以我沒有得到一個數組。

額外注

,如果我想的方法添加到返回的對象是什麼?換句話說,我想用自定義方法的陣列擴展像波紋管

var TaskListModel = function (data) { 
     self = this; 
     self.Items = ko.observableArray(); 
     if (data != null) { 
      ko.mapping.fromJS(data, {}, this); 
     } 

     self.selectedTask = ko.observable(null); 
     self.selectedID = ko.observable(-1); 

     self.selectTask = function (p) { 
      if (self.selectedID() == p.ID()) 
       self.selectedID(-1); //Hide on click 
      else 
       self.selectedID(p.ID()); 
      self.selectedTask(p); 
     }; //Create the select method 

我試圖映射到項目歸屬,但問題依然存在,我所有的想法。

回答

0

看起來JSON中的換行符(\n)存在問題。我不確定它是否是映射插件或其他內容,但如果您在JSON中刪除了\n,則映射插件可以正常工作。我檢查:

var tasks = ko.mapping.fromJSON(res); 
alert(tasks().length); 

記住的任務將是一個observableArray所以你要「執行」它讓底層的數組,如果你要檢查它。

下面是使用JSON的一個完整的例子,但沒有換行:

http://jsfiddle.net/psteele/dKK55/

+0

奇怪,因爲我沒有更改服務器代碼,並奇蹟般地它採空工作。 令人驚歎的答案謝謝! – Morphex