2014-04-09 63 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