2013-06-15 3 views
1

JSON 결과를 MVC4의보기에 바인딩하는 방법을 알아 내려면 도움이 필요합니다.getJSON에서 반환 된 열거 가능한 자식 레코드의 속성에 액세스

나는 외관상으로 정확한 JSON를 돌려 보내는 뒤에 오는 전망 모형이있다;

보기 모델은 다음과 같이 JSON은 API에서 반환

function task(name, duedate, overdue, phase, project, description, groups) { 

var self = this; 

self.name = ko.observable(name); 
self.duedate = ko.observable(duedate); 
self.overdue = ko.observable(overdue); 
self.phase = ko.observable(phase); 
self.project = ko.observable(project); 
self.description = ko.observable(description); 
self.group = ko.observable(groups); 
} 


function bTask() { 
var self = this; 
var parts = document.location.href.split("/"); 
var id = parts[parts.length - 1]; 
self.atasks = ko.observableArray([]); 

$.getJSON("/api/tasks/GetProjectTasks?id="+id+"&stat=Active", function (data) { 
    $.each(data, function (key, val) { 
     self.atasks.push(new task(val.Name, moment(val.DueDate).format('DD/MM/YYYY'), val.overdue, val.Phase, val.Project, val.Description, val.Goups)); 

    }); 
}); 
} 

$(document).ready(function() { 
var aTask = new bTask(); 


ko.applyBindings(aTask, document.getElementById('activetasks')); 

function onLoop() { 
    var self = aTask; 
    var parts = document.location.href.split("/"); 
    var id = parts[parts.length - 1]; 

    $.getJSON("/api/tasks/GetProjectTasks?id=" + id + "&stat=Active", function (data) { 
     self.atasks.removeAll(); 
     $.each(data, function (key, val) { 
      self.atasks.push(new task(val.Name, moment(val.DueDate).format('DD/MM/YYYY'), val.overdue, val.Phase, val.Project, val.Description, val.Goups)); 
     }); 

    }); 



    } 

setInterval(onLoop, 10000); 
}); 

은이다;

[{"$id":"1","DueDate":"2013-06-05T00:00:00","Id":4,"Name":"Address UAT Issues","Description":"Task 4 Description","Status":"Active","Phase":"Requirements Review","Project":"RAP C1","StartDate":"2013-05-31T17:28:55.46","overdue":"error","Groups": [{"$id":"2","Name":"Group 1","Description":"Group 1 Description","ClientId":1,"GroupType":null,"Id":1},{"$id":"3","Name":"Group 2","Description":"Group 2 Description","ClientId":1,"GroupType":null,"Id":2}]}] 

볼 수 있듯이 두 개의 그룹이있는 1 개의 작업이 올바른 것으로 반환됩니다.

내보기의 작업을 반복하면 작업의 모든 속성에 액세스 할 수 있지만 반환 된 그룹 및 속성에 액세스하는 방법을 모르겠습니다.

보기에서 어떻게 바인딩해야합니까?

foreach 작업 내에서 foreach 할 수 있습니까?

이 도움말을 설명하는 데 큰 도움이됩니다. 사전

답변

0

에서

덕분에 당신은 foreach 바인딩을 사용할 수 있습니다.

데이터를 기반으로 fiddle을 만들었습니다.

<div data-bind="foreach : Groups"> 
    <span data-bind="text : $id"></span> 
    <span data-bind="text : Name"></span> 
    <span data-bind="text : Description"></span> 
    <span data-bind="text : GroupType"></span>  
    <span data-bind="text : Id"></span> 
    <br/> 
</div> 

도움이되기를 바랍니다.

+0

안녕하세요 Damien에게 감사드립니다. 이제 잡히지 않은 오류가 발생합니다. 바인딩을 구문 분석 할 수 없습니다. 메시지 : ReferenceError : 그룹이 정의되지 않았습니다. 바인딩 값 : foreach : Groups 내가 "작업"을 정의하고 제 바인딩을 수행하는 방식으로 생각합니다. – user2441932

+0

지금은 무엇을 의미합니까? 당신은 바로 json 데이터와 viewModel 사이에 약간의 차이가 있다는 것을 알았습니다. 그룹이 그룹이됩니다. 그냥 오타에주의하십시오 :). – Damien

+0

아 - 저 오자. 전에 foreach를 시도했지만, 결국에는 거의 차이가 없다고 생각합니다. 좋은 장소 - 감사합니다 Damien – user2441932

관련 문제