2013-08-01 1 views
5

나는 서버에서 오는이 JSON 데이터를 가지고 :녹아웃 맵핑 JSON 업데이트 기존 뷰 모델

{"HaveNotification":false,"IsError":false,"Title":null,"Description":null} 

및 ko.mapping를 통해이보기 모델을 채우기 위해 노력하고 있어요 :이 코드

var notifyVM = { 
    HaveNotification: ko.observable(true), 
    IsError: ko.observable(false), 
    Title: ko.observable('Title goes here'), 
    Description: ko.observable('Description goes here'), 
} 

, 폴링 간격에 호출되는 :

function pollNotifications() { 

    $.getJSON('@Url.Action("GetNotifications", "Home")', function (data) { 

    ko.mapping.fromJSON(data, notifyVM); 

    setTimeout(pollNotifications, 10000); 
    }); 
} 

을하고이 페이지로드 코드 :

$(function() { 

    ko.applyBindings(notifyVM); 

    setTimeout(pollNotifications, 10000); 
}); 

그러나 작동하지 않습니다. fromJSON 호출 후 뷰 모델을 검사하면 관찰 가능 항목이 업데이트되지 않고 초기 값으로 유지됩니다.

UPDATE :

var newVM = ko.mapping.fromJSON(data); 

내가이 생성 뷰 모델은 내 것과 동일하지 않은 것을 알 수 , 그것은 하나의 관찰로 구성되어 나는 이것이 pollNotifications에서 할 경우 일부 추가 정보를 원하시면 ... 함수 함수 인 반면, 광산은 관찰 가능한 속성 집합을 가진 객체입니다.

+0

ko.mapping.fromJS –

답변

0

수동으로 값을 뷰 모델에 매핑하고 이것이 작동하는지 확인해 보셨습니까?

function pollNotifications() { 
    $.getJSON('@Url.Action("GetNotifications", "Home")', function (data) { 
     notifyVM.HaveNotification(data.HaveNotification); 
     notifyVM.IsError(data.IsError); 
     notifyVM.Title(data.Title); 
     notifyVM.Description(data.Description); 

     setTimeout(pollNotifications, 10000); 
    }); 
} 

위의 방법으로 문제가 해결되지 않으면 데이터에 문제가 있음을 알 수 있습니다. 그렇지 않으면 ko.mapping.fromJSON()으로 매핑이 올바르게 수행되지 않습니다. $ .getJSON는 데이터 객체 (아닌 JSON 문자열) 반환되기 때문에

+0

예 수동으로 값을 업데이트하면 작동합니다. 하지만 ko.mapping 메서드가 작동하지 않는 이유를 알고 싶습니다. JSON 데이터 구조가 내보기 모델과 일치하지 않는다고 생각합니다. 그러나 어디서 또는 왜 볼 수 없습니다. – user380689

+0

당신은'fromJSON()'함수 대신'ko.mapping.fromJS (data, notifyVM);을 시도 했습니까?'fromJSON()'함수가 JSON으로 해석되는 것으로 데이터를 실격시키는 지 궁금합니다. –

+0

예, 시도했지만 여전히 작동하지 않습니다. – user380689

0

대신 ko.mapping.fromJSON의 ko.mapping.fromJS을 사용해야합니다

성공 콜백이 전달되는 반환 된 데이터를, 일반적으로 JSON 구조체에 정의 된 JavaScript 객체 또는 배열이며 $ .parseJSON() 메서드를 사용하여 구문 분석됩니다. 응답의 텍스트 상태도 전달됩니다.

http://api.jquery.com/jquery.getjson/

CONSOLE.LOG (데이터)을 수행; 차이를

8

시도를 표시 :

ko.mapping.fromJS(data, {}, notifyVM);

개의 매개 변수 형태는 이전 ko.mapping.fromJS하여 만든 조회 모델을 예상한다. fromJS가 추가하는 특정 속성을 기반으로 한 항목을 찾지 못한 경우 fromJS (데이터, 옵션) 양식을 호출한다고 가정합니다.

3 매개 변수 형식은이 모호성을 제거합니다.

+0

Wicked Whoot와 da bomb! 이 하나가 내 하루를 구 했어, 고마워! – Michel