2015-01-19 7 views
0

여기에 비슷한 질문이 몇 개 있었지만 실제로 내 문제를 해결하는 데 도움이되지 않았습니다.Play Framework에서 AJAX 호출의 부분 렌더링

페이지에 테이블이 있고 클릭시 테이블을 다시 렌더링해야하는 버튼이 있습니다 (다른 페이지 매김 매개 변수, 정렬 등 사용).

여러 접근법을 시도하고 js 라우터가 내장 된 컨트롤러에 값을 전달하는 데 성공했지만 값이 ajax 호출을 사용하여 백엔드로 전달되었으므로 테이블을 다시 렌더링 할 수 없습니다.

내 임베디드 라우터는 다음과 같습니다

@helper.javascriptRouter("jsRoutes")(
    routes.javascript.UserController.getUsers 
) 

그리고 내가 좋아하는 뭔가가있는 페이지에서 호출됩니다 $ 아약스 (jsRoutes.controllers.UserController.getUsers (3 사실, "로그인"));

이제 마지막으로, getUsers() 호출의 결과로 테이블을 다시 렌더링하고 싶습니다.

간단히 전화 :

public Result getUsers(int size, boolean isAsc, String sortBy) { 
    ...... 
    Logger.info("Returning " + size + " users"); 
    return Results.ok(usersPage.render(userDtos)); 
} 

나를 위해 작동하지 않습니다.

답변

0

몇 가지 접근법이 있습니다.

가장 간단한 방법은 표를 HTML로 렌더링하는 재생 컨트롤러를 사용하고 $('#mytable').load(...)을 사용하여 페이지에서 가져 오는 것입니다.

JSON format에 데이터를 반환하는 재생 컨트롤러를 더 유연하게 사용하려면 브라우저에서 HTML로 변환하십시오. 이것은 클라이언트 측 템플릿 엔진 (예 : http://handlebarsjs.com/)을 사용하거나 완전한 자바 스크립트 프레임 워크 (예 : AngularJS 또는 Ember.js)를 사용하여 직접 수행 할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 두 번째 접근법에 대해 좀 더 구체적으로 설명 할 수 있습니까? HTML을 반환하는 것은 나를위한 옵션이 아닙니다. templating에 관해서는, 나는 build-in twirl 템플릿 엔진에 충실 하겠지만, 그것은 나의 주요 관심사가 아닙니다. ajax로 작업을 호출 할 때 HTML 클라이언트 측을 손으로 렌더링하는 방법에 대한 예제를 제공 할 수 있습니까? – yuranos87

+0

왜 HTML을 반환 할 수 없습니까? 실제로 이것은 HTML 조각 (귀하의 경우 테이블) 일 뿐이므로이 단편은 DOM 노드를 업데이트합니다. 전체 페이지 새로 고침이 없습니다. JSON 접근 방식은 JavaScript에서 HTML 렌더링을 의미합니다. Twirl을 사용하여이를 수행 할 수는 없습니다. – user2595529

+0

다음은 클라이언트 측 "수동"렌더링의 두 가지 예입니다. http://jsfiddle.net/mjaric/sEwM6/ 및 http://stackoverflow.com/questions/21184733/render-json-into-html 테이블이 복잡한 당신은 정말로 템플릿 엔진이나 완전한 프레임 워크를 사용해야합니다. – user2595529