2011-02-04 15 views
4

Zend Frameworkを使用してアプリケーションを構築しました。私はDojoの代わりにJQueryを使うことに決めました。私は、ajaxLinksやdialogContainersのようなものにZendXヘルパーを使用します。できるだけAJAXを動かすようGUIを試してみたい。しかし、私は自分の気持ちを決定するのに苦労します。 ほとんどの場合、ページ全体を再読み込みするのではなく、「ページ」をdialogContainerに読み込む必要があります。たとえば、ユーザーデータなどを変更するためのフォームを含むダイアログが表示されます。Zend Frameworkを使用してAJAXベースのGUIを作成する方法

最初はすべてのページを返しましたが、AJAXリクエストを使用してリクエストされた場合は、別のレイアウトテンプレートを使用してすべての未使用のjavascriptインクルージョンなどを回避しました。これにより、基本的にブラウズ可能なページの1つのバージョンAJAX経由の通常のAND。しかし、私は自分がこれが好きであると確信していません。 Zend ServerのGUIを見ると、彼らはこれをやっているようですが、jsonでエンコードされたデータを返してそのページを構築しているわけではありません。

これに最も適した方法は何ですか。また、取得したページに固有のjavascriptをどのように処理すればよいですか。私は今、そのページのphtmlファイルにすべてのページ固有のjavascriptを持っています。

私が心配しているもう一つのことは、たくさんのダイアログボックスを開いてajax経由でデータを取り込むときに作成されるリソースをどのように追跡するかです。 1つのダイアログを開き、項目のリストを取得したとします。特定のアイテムのモーダルダイアログコンテナポップアップをもう1つクリックすると、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()関数でこれを使用します。 )(myactionActionを呼び出すときに、要求がAJAX呼び出しを介して行われた場合

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

は何ですか、これはありません、それはチェックします。そうであれば、それはレイアウトを無効にし、AJAX呼び出しでない場合と同様に、 "myaction.phtml"ではなく "myaction。ajax .phtml"をレンダリングします。このようにすれば、何もせずにアクションからクリーンなHTML出力を得ることができます。各アクションにリクエストタイプのチェックコードを書く必要はありません。私はそれが一般的に簡単に動作することがわかった。

読み込んでいるコンテンツに別のJavaScriptが付いている場合は、それをビューに追加してエコーすることも忘れないでください。

$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

関連する問題