実際には、Symfony 2 PHPフレームワークとTwigをテンプレートエンジンとして使用しています。 Viewレイヤのコードの重複を避け、プログレッシブエンハンスメント(p-jax)の恩恵を受けることができると考えています。YUI3(Y.App)とSymfony2のプログレッシブエンハンス
現状:
PJAXルートに基づいて、ページレイアウトの一部の更新を処理しません。 私たちの目標は、ナビゲーションがY.App(ルーティング)によって処理されるときに、一部のページ「フラグメント」(HTMLノード)のみが更新されるシステムを実装することです。 https://github.com/benjamindulau/PocSfYui/ Javascriptがここで見つけることができます:この点で
は、我々は、POCを実装するために始めた https://github.com/benjamindulau/PocSfYui/tree/master/src/Acme/PocBundle/Resources/public/js そして、そこY.App初期設定: https://github.com/benjamindulau/PocSfYui/blob/master/src/Acme/PocBundle/Resources/views/layout.html.twig#L66考えであること、我々は最初のページをロードし、すべてのものサーバサイド(プログレッシブエンハンスメント)で処理されます。つまり、ページ全体とページフラグメントがサーバによってレンダリングされます。
{
"title": "MyAwesomeWebsite - Photos", // page <title>,
"fragments": {
"sidebar": "<h2>Sidebar Menu<\/h2><!-- etc.... -->", // ..... maybe an updated menu for active page
"main": "<h2>Photos<\/h2><div id=\"photo-list-container\"><ul id=\"photo-list\"><!-- photo items.... --></ul></div>", // Pre-rendered photo list
},
"templates": {
"photo_item_tpl": "<li data-id=\"{{index}}\"><img src=\"{{url}}\" alt=\"{{title}}\" \/><\/li>" // template used later by Y.App for adding new photos
}
}
基本的には現在のビューの内容の「JSONified」バージョンです:Y.Appによって実行されるべき次の要求について は、我々は以下の(/写真路応答)のようなJSON形式を定義しました(ルート)。
サーバーサイドではリクエストがY.Appから来たものであることを検出し、Twigテンプレートをレンダリングする代わりに、そこから「ブロック」を抽出し、このJSONレスポンスを更新する必要があります。クライアントはこの特定のページに必要です。クライアント側(Y.App)で
:
- 我々は、ページ全体のレイアウトを表すベースPageCompositeViewを定義し、これを継承し、独自のサブビューをinstanciates Page2colLeftView:SidebarView、MAINVIEW 、HeaderView、....
- 私たちは私たちのPJAXのような要求を鍛造するIOモジュールを書いています。で移動するとき
- :(https://github.com/benjamindulau/PocSfYui/blob/master/src/Acme/PocBundle/Resources/public/js/views/page.js#L27を参照してください)私たちはSHOWVIEW呼び出す最初のロードに
- とそれぞれのコンテナに「再接続」ページのサブビューに試してみてください。私たちは、代わりに「loadContent」(https://github.com/benjamindulau/PocSfYui/blob/master/src/Acme/PocBundle/Resources/views/layout.html.twig#L93を参照)のそれを使用しますページ、Y.Appはページ構造について知っています。
は、我々が直接私たちのブラウザに「/写真」のパスを読み込む言う: は、サーバが 2. YUIのAppは、そのPageCompositeViewを作成し、各サブビューを再接続フォトリストを含むページ全体をレンダリング1.そのcontainer 3. YUIアプリケーションは、 "MainView"ビュー(メインコンテンツに対応)に "PhotoModelList"モデルリストにバインドされた "PhotoListView"サブビューが含まれている必要があることを認識しています。したがって、 "/ photos"パス上のコールバックは "PhotoView"インスタンスを作成し、それをコンテナに再接続します(サーバーによってレンダリングされます)。
2と3(特に3)は手動で行われます。
POCは実際に動作します。
さらに進む前に、アドバイスを受けたいと思います。
まず最初に、このPOCについてどう思いますか?
私たちは実際にこのアプローチで賛否両論&を見ています。 - 単一のコンポジットビュー - 最初のロード時に、モデルは既存のDOMを読み取ることによって再水和されます(例:写真リストサーバーによってレンダリングされます) - 私たちが進むほど、Y.Appについて何か不足していると思っており、間違った方法を取ったと思います.-)
しかし、多くの作業をせずに完全な非同期Webサイトを構築できるということです。
私たちの主な目標は、「ほぼ完全な」一般的なソリューションを提供することによって、すべてを維持できるようにすることです。
たぶん、そのメッセージから出てくる主な質問は次のようになります。
「我々はY.App正しい方法を使用していますか?」 ;-)
あなたはどう思いますか? CMSの管理のPOCのために
おかげで、 CYA