2011-02-04 2 views
4

Zend Framework를 사용하여 응용 프로그램을 만들었습니다. 나는 Dojo 대신 JQuery를 사용하기로 결정했다. 저는 AjaxLinks와 dialogContainers와 같은 것들을 위해 ZendX 도우미를 사용합니다. 가능한 한 AJAX를 구동하도록 GUI를 만들고 싶습니다. 그러나 나는 최선의 접근이라고 생각하는 것을 결정하는 데 어려움을 겪습니다. 대부분의 경우 전체 페이지를 다시로드하는 대신 dialogContainer에 "페이지"를로드해야합니다. 그래서 예를 들어 사용자 데이터 나 비슷한 것을 변경하기위한 폼을 담고있는 대화 상자를 얻을 수 있습니다.Zend Framework를 사용하여 AJAX 기반 GUI를 만드는 방법

처음에는 전체 페이지를 반환했지만 AJAX 요청을 사용하여 요청한 경우 다른 레이아웃 템플릿을 사용하여 모든 unenecerry javascript inclusions 등을 피할 수있었습니다. 이렇게하면 기본적으로 다음과 같이 탐색 할 수있는 페이지의 한 버전을 빌드 할 수있었습니다. 정상 및 AJAX를 통해. 그러나 나는 내가 이것을 좋아한다는 자신을 확신하지 못했다. Zend Server GUI를 살펴보면 json으로 인코딩 된 데이터를 반환하지 않고 페이지를 만들지 않는 것으로 보입니다.

가장 좋은 방법은 무엇이며 어떻게 검색된 페이지와 관련된 javascript를 처리해야합니까? 이제 해당 페이지의 phtml 파일에 모든 페이지의 특정 JavaScript가 있습니다.

내가 걱정하는 또 다른 사항은 많은 대화 상자 컨테이너를 열고 아약스를 통해 채울 때 생성 된 리소스를 추적하는 방법입니다. 대화 상자 하나를 열고 항목 목록을 얻습니다. 특정 아이템에 대한 또 다른 모달 대화 상자 컨테이너 팝업을 클릭하면 ajax를 통해 채워집니다. 그러나 메인 페이지가 다시로드되지 않으면 나는 이것이 처리하기 어려워지는 것을 볼 수 있습니다.

나는 아약스 주도의 UI를 원한다는 느낌이 들지 않으므로 모서리에 자신을 칠하기 전에 올바른 방향으로 나를 가리켜주세요. ;)

업데이트 : 기본적으로 Zend의 설명서뿐만 아니라 컨텍스트 제목에서 찾을 수있는 모든 종류의 자습서를 시도했습니다. 나는 문서화되지 않은 기능이나 무언가를 가능하게하기 위해 놓친 것 같아요. 이후 코드를 삭제했지만 작동하지 않았지만 예제를 찾으려고 노력하기 전에 벨로우즈 코드 같은 것을 시도했습니다.

$ajaxContext = $this->_helper->getHelper('AjaxContext'); 
$ajaxContext->addActionContext('list', 'html') 
      ->addActionContext('modify', 'html') 
      ->initContext(); 

그리고 내가 상관없이 모두 그냥 정상적인로 .phtml 파일을 항상 렌더링 결국 어떤 다른 ActionContexts 등 만 추가하려고 다음

$this->_helper->contextSwitch() 
    ->setContext('html', array(
       'suffix' => 'html', 
       'headers' => array('Content-Type' => 'text/html; Charset=UTF-8'), 
) 
     ) 
    ->addActionContext('index', array('html','xml', 'json')) 
    ->setAutoJsonSerialization(true) 
    ->initContext(); 

같은 것을 시도했다.

+0

inquam의 경우/format/xxx를 쿼리 끝에 추가해야합니다. 그렇지 않으면 컨텍스트 도우미가 활성화되지 않습니다. '정상적인'XHR이라 할지라도/format/html을 지정해야합니다. –

답변

1

ZF/Ajax 응용 프로그램을 만들 때 배웠던 점이 여기에 있습니다. HTML 데이터

:

당신은 ActiionContext 액션 도우미 (ZF Reference)를 사용할 수 있습니다. 액션에 AJAX 컨텍스트를 추가 할 수 있습니다. 컨트롤러의 init() 함수에서 이것을 사용합니다.

$ajaxContext = $this->_helper->getHelper('AjaxContext'); 
$ajaxContext->addActionContext('myaction', 'html')->initContext('html'); 

이것은 무엇입니까? myactionAction()을 호출하면 요청이 AJAX 호출을 통해 이루어 졌는지 확인합니다. 그럴 경우 AJAX 호출이 아닌 것처럼 "myaction.phtml"이 아닌 "myaction. ajax .phtml"으로 레이아웃이 비활성화됩니다. 이 방법을 사용하면 별도의 작업 없이도 작업에서 깨끗한 HTML 출력을 얻을 수 있으므로 각 작업에 요청 유형 검사 코드를 작성할 필요가 없습니다. 나는 그것이 일반적으로 쉬운 일이라는 것을 알았다.

로드중인 컨텐츠에 추가 자바 스크립트가있는 경우 뷰에 추가하고 반향 출력하는 것도 잊지 마십시오.

$this->headScript()->appendFile("/js/list.js"); 
echo $this->headScript(); 

그런 다음 JavaScript는 정상적으로 실행됩니다. JSON 데이터

JSON 액션 도우미를 들어

는 JSON 데이터를 반환 할 작업에 사용이 매우 빠르고 간단합니다.

$r = "Success"; 
$this->_helper->json($r); 

이렇게하면 순수 JSON 만 반환됩니다.

좀 더 구체적인 질문을하면 도움이 될 것입니다.

+0

컨텍스트에 대해 읽었지만 아무리 노력해도 문제가 없습니다. 오류가 발생하지 않았거나 .phtml 파일 만 사용합니다. 모든 종류의 조정이 필요합니다. 아마 내가 간과 한 단순한 것이지만, 내가 얼마나 많은 독서를했는지는 알지 못했다. – inquam

+0

코드를 보여줄 수 있습니까? (가능한 경우 코드로 업데이트하십시오.) –

+0

공을 플레이하기 위해 컨텍스트를 얻지는 않았지만 이것이 올바른 접근이라고 생각하며 어쨌든 답을 수락합니다. – inquam

관련 문제