2012-04-21 5 views
4

MVC 애플리케이션을 작성 중이며 Knockout.js가 프로세스에서 제외하고 많은 문제를 해결할 것이라고 판단했습니다. 새로운 문제는 내가 문제를 풀고있다.asp.net MVC with Knockout MVC with javascript

모든 MVC 끝점을보기 만 반환하도록 변환 한 다음 JSON 개체를 반환하는 여러 다른 끝점을 만들었습니다. 사용자가 웹 사이트를 탐색하면 사이트에서 기본 UI 프레임을로드합니다. 그 후에, Knockout.js는 AJAX 호출을 통해 모델을로드합니다. 이로 인해 모든 페이지가로드 된 다음 페이지가로드되고 모든 데이터가있는 MVC 만있는 위치로 다시로드됩니다.

나는 동시에 두 가지를 모두로드하는 방법을 찾고 있었지만 사이트를 완전히 리팩터링 할 필요가없는 것은 찾지 못했습니다. 보기 엔드 포인트에

  • 로 병합 JSON 엔드 포인트 및 @Html.Raw(Json.Encode(object))

를 사용하여 코드 숨김에서 JSON으로 모델을 변환하지만 내 모든 순수 JSON 엔드 포인트의 탐을 얻을 수 있습니다 최선의 선택이었다.

JSON 끝점 데이터를 서버 측의보기로 전달할 수있는 다른 방법이 있습니까? 또는 모델과 뷰를 동시에로드 할 수있는 방법은 무엇입니까?

답변

3

아키텍처가 맞지만 초기로드에서 모델의 데이터로 뷰를 미리 채워야합니다. 뷰를 반환하는 컨트롤러 동작 내에서 ViewData에 데이터를 채워야합니다. 그런 다음 뷰에는 처음에 모델 값이로드되고 각 UI 요소에는 해당 특정 필드에 대한 컨트롤러 동작을 호출하는 AJAX 업데이트가있을 수 있습니다.

이 또한 ideal case for a ViewModel입니다. 이것은 as well을 도울 수 있습니다.

+0

답변 해 주셔서 감사합니다. 같은 페이지에 있는지 확인할 수 있도록 JSON 끝점을 호출해야합니다. 뭔가 : var model = @ Html.Action ("Data", "Items") 여기서 model은 js입니까? –

+0

업데이트 용 JSON 끝점 만 호출하십시오. ViewModel 객체를 만들고 자바 스크립트로 상호 작용하는 경우 해당 객체와 상호 작용하는보기 만 있어야하며 AJAX 요청을 캡슐화하는 메소드 (Controller 끝점을 사용)가 있어야합니다. 이렇게하면 주기적으로 캐싱 또는 업데이트와 같은 지능적인 작업을 수행 할 수 있습니다. –

+0

자, 내 뷰 끝점에서 JavaScript로 변환 된 모델을 반환해야하며 해당 모델의 업데이트 된 버전을 반환하는 json 끝점이 있어야합니까? 이 경우 코드 중복을 제거하려면 어떻게해야합니까? –

1

초기보기 생성시 초기 데이터를보기에 바로 표시하도록하는 것이 좋습니다. 일반적으로 이것은 나중에 데이터를 채우는 별도의 AJAX 호출 + JavaScript보다 나은 성능을 제공합니다.

하지만이 또한 실제로로드하는 페이지의 유형에 달려 있다고 생각합니다. 앱이 주로 AJAX 기반 (SPA 스타일 모델) 인 경우 첫 번째로드는 그다지 중요하지 않으므로 한 번만 발생하므로 약간의 시간이 소요될 수 있습니다. 모든 데이터를 AJAX 또는 전통적인 View 조작을 통해 편도로로드하는 것이 다소 쉽고 일관성이 있습니다. 클라이언트 측 코드에서 목록 또는 레코드에 대한 전체 데이터 세트를 다시로드해야하는 경우 템플릿/뷰 로직을 복제하지 않아도 해당 출력을 생성 할 수 있습니다.