2013-03-19 3 views
0

ko.mapping.fromJS (Model)을 사용하여 KnockoutJS에 ASP.NET MVC viewModel을로드했습니다.ASP.NET MVC에서 녹아웃 JSON 데이터 다시로드 문제

내 뷰 모델은 다음과 같은 :

public IEnumerable<FunkyThing>funkyThings; 
public FunkyThing selectedFunkyThing; 

각 FunkyThing 문자열 속성 funkyThingName 있습니다. 매핑이 정상적으로 작동했으며 이름이있는 테이블에있는 모든 펑키 한 것들을 볼 수 있습니다.

빠른 새로 고침 버튼을 추가하고 싶습니다. 성공적으로 차례로 서버의 RefreshJSON 메소드를 호출하는

model.refresh= function() { 
      var url = '@Url.Action(MVC.FunkyThings.RefreshJSON())'; 
      $.getJSON(url, function (returnedData) {     
       ko.mapping.fromJS(returnedData, {}, model.funkyThings); 
      }); 

새로 고침 함수를 호출한다 : 그래서 다음 간단한 버튼을 생성 한 데이터는 버튼과 같은 형태 녹아웃 기능 새로 고침을 클릭 바인딩. 서버가 JSON 데이터를 다시 전달합니다.이 디버깅 도구는 Chrome의 디버거에서 returnedData 위로 마우스를 가져 가면 크롬에서 볼 수있는 업데이트 된 funkyThings 배열입니다.

그러나 불행하게도 매핑 함수가 호출 된 후 바인딩은 휴식 :

catch되지 않은 오류 : 바인딩을 구문 분석 할 수 없습니다입니다. 메시지 : ReferenceError : funkyThingName이 정의되지 않았습니다. 바인딩 값 : 텍스트 : funkyThingName

그리고 나는 왜 ...?

+0

당신이 원래의 get이있는 함수의 코드를 포함 할 수 있습니다 새로 고침? – Rich

답변

1

model.funkyThings이 관찰 가능합니까? 이 경우, 당신은 함수로 매핑 방법으로 전달 시도 할 수 있습니다 :

ko.mapping.fromJS(returnedData, {}, model.funkyThings()); 

가 실패하면 새로 고침 방법에 의해 반환 된 JSON의 구조가 올바른지 확인입니까?

아, 당신은 매핑 플러그인의 fromJSON 메소드를 호출 할 필요가 그래서 당신은 다시 JSON 문자열을 받고하는 경우 : 당신은 여기 너무 funkyThings에 괄호를해야 할 수도 있습니다

ko.mapping.fromJSON(returnedData, {}, model.funkyThings); 

,하지만하지 않고 그것을 시도 먼저. 반환 된 객체가 올바른 형식 인 경우

+0

감사합니다. 괄호를 사용하면 예외가 제거됩니다. 그러나 아무 변화도 일어나지 않는 것 같습니다. 나는 model.funkyThings.valueHasMutated()를 시도했다. 그러나 목록은 그대로 유지됩니다 –

+0

fromJSON 메서드도 시도 했습니까? –

+0

나는 둘 다 시도했다. 나는 그것이 내가 원하는 fromJS라고 확신한다. 나는 C#을 측면에 사용하고 있습니다 : 공공 JsonResult RefreshJSON() { .... // refreshy 물건 // 반환 JSON (viewModel.funkyThings, JsonRequestBehavior.AllowGet을); } fromJS를 사용해야하는 모든 곳 –

1

는 또한 잘 당신에게 할 바인딩 만 수행해야합니다 반대로

model.FunkyThings(returnedData). 
+0

다음을 고려하십시오 : _Funky 것들은 관찰 가능한 배열이고 반환 된 객체는 펑키 물건 객체들의 모음입니다 –

관련 문제