2

ここで一般的な質問の詳細。

現在、私が取り組んでいるプロジェクトの多くは、サーバー側のビューを利用してユーザー インターフェイスをレンダリングし、ところどころに JavaScript を追加しています。小規模なプロジェクトではこれで問題ありませんが、最近では .js ファイルのサイズがかなり大きくなっており、スタック上のスタック .live および .bind jQuery 呼び出しはもはやそれをカットしていないようです。

JavaScript をビューに、そしておそらく Web アプリケーションのコントローラーにブレンドする良い方法は何ですか? Java 駆動の Web サイトでは、DWR が非常に便利であることがわかりましたが、多くの場合、ユーザーが開始したイベントにはコントローラー ロジックが必要です。これは、ページに含まれる多くの孤立した機能の一部であると、圧倒され、混乱し始めています。

私は完全に AJAX 駆動のテンプレート エンジンを考えましたが、それは少し極端なようで、誰にとっても使いにくいでしょう。一方、既存のバックエンド クラスの機能を複製することは冗長に思えます。

完全に AJAX フリーでも完全に JavaScript 駆動でもない Web アプリで使用される、優れた「中間」アプローチとは何ですか?

編集: おそらく、問題の日常的な例を提供します。何かを確認または拒否するモーダル ダイアログをユーザーに提供したいとします。

"Your picture is uploaded but looks terrible. You need a new 'do." (OK | What?)

現在、あるシナリオでは、ページを更新して画像をアップロードした結果として、そのダイアログがポップアップする可能性があります。この場合、サーバー側のビューがそれをレンダリングします。別のシナリオでは、AJAX 経由で画像をアップロードした後に表示される可能性があります。その場合、ページ上の JavaScript によってトリガーされる可能性があります。Dialogどちらの場合も、ダイアログ作成コードにアクセスする必要があります。たとえば、両方の場合で同じように機能するクラスを作成する方法を今のところ考え出すことはできません。

4

5 に答える 5

2

私は確かにこの分野の専門家ではありませんが、過去に Web サイト開発の「AJAXY」の世界にうまく適合するように思われる RESTful サービスを利用するプロジェクトに取り組んできました。Web アプリには理想的とは言えませんが、コンテンツが豊富なプレゼンテーション サイトには最適です。カスタムテンプレートを介して、マルチプレゼンテーション形式のニーズにうまく適合するようです. そのため、サービスは HTML ページ テンプレートを使用して pictureUpload サービスを呼び出すか、サービスを呼び出して AJAX コンポーネント テンプレートを要求することができます。

于 2010-06-23T01:37:10.947 に答える
1

GoogleWebToolkitがあなたが探しているものかもしれないように思えます。

これにより、クライアント側のアプリケーションをJavaで記述し、JavaScriptとしてデプロイできます。

おそらく、Javaでコードを一度記述して、両方の場所で使用することができますが、私自身はGWTを使用したことがありません。

私が開発している私自身のフレームワークでは、基本的に開発者にコードを2回書くように強制しています。母国語で1回、JavaScriptで1回。JSを返す関数を入力させると、必要な場所で自動的に呼び出すことができます。ただし、すべてのコードが1つのクラスに含まれているため、少なくともロジックがいたるところに分散しているわけではなく、機能的に同等かどうかをすばやく比較できます。正規表現のようなものについては、通常、一度だけ記述してからJSに渡すことができます(私はこれを使用して、クライアント側で1回検証し、次にサーバー側で再度検証します)。

于 2010-06-23T03:58:30.940 に答える
1

私は最近、社内アプリ用にJavascriptMVC (2.0) を使用しています。いぼがありますが、全体的なアーキテクチャは優れており、「コントローラー」JS クラスを作成できます。各コントローラーは、DOM ツリーのサブセット (または、必要に応じてページの視覚的な部分) を「所有」し、そのゾーン内のイベントに応答し、EJS テンプレート(「ビュー」部分) を使用してその下の領域を変更します。それは、そうでなければ多くのことをうまく抽象化し、OOP モデル$(...).bind()を呼び出します。$(...).live()

私の場合、私たちのインターフェイスは、プロジェクトに関する制約により、ほぼ 100% JS 主導ですが、組み合わせて使用​​できない理由はありません。

現在、あるシナリオでは、ページを更新して画像をアップロードした結果として、そのダイアログがポップアップする可能性があります。この場合、サーバー側のビューがそれをレンダリングします。別のシナリオでは、AJAX 経由で画像をアップロードした後に表示される可能性があります。その場合、ページ上の JavaScript によってトリガーされる可能性があります。

Javascriptが無効になっていても機能する方法でそれを行う方法は次のとおりです。

  1. サーバー側は、HTML アップロード フォームを出力します。プレーン HTML フォームは別の PHP ページに送信されます。
  2. ページの読み込みが完了すると、Javascript のスニペットが実行され、そのフォームが検索されます。
  3. JavaScript はインスタンスを作成し、コンストラクターHairdoUploadControllerに渡します。<form>...</form>
  4. コントローラーはフォームを「引き継いで」、JQuery セレクターを使用してスタイルを変更し、フォーム送信イベントをトラップします。
  5. コントローラーは新しい div を追加し、それを (最初は非表示の) Jquery-UI ダイアログに関連付けます。
  6. フォームが送信されると、コントローラーは代わりに、プレーン フォームとは少し異なる URL に対して AJAX 呼び出しを行います。
  7. AJAX 呼び出しの結果がダイアログの div にプッシュされ、ダイアログが表示されます。
于 2010-06-23T20:58:27.440 に答える
1

サーバーですべてのロジックをスローし、サーバーが送信するものを表示するダムクライアントを想定できます。

次の 2 つのシナリオがあります。

  1. 非 Ajax リクエスト
  2. Ajax リクエスト

それらの唯一の違いは、最初のものでは、モーダル ダイアログよりも多くのコンテンツをレンダリングしていることです。Dialogダイアログの HTML 表現を吐き出し、両方のタイプの要求に使用されるクラスをサーバー上に置くことができない理由はありません。次に、AJAX 呼び出しで、サーバーの応答を DOM に追加するだけです。

おっしゃる通り、クライアント側とサーバー側の両方で UI 作成ロジックを共有することは問題になる可能性があるため、どちらかを選択してそれに固執することをお勧めします。上記の場合、すべてのロジックがサーバーにプッシュされます。AHAHについてもっと読んでください。

于 2010-06-23T03:45:32.303 に答える
0

最近、レイアウト コンポーネント (マスター ファイル) と小さなカプセル化された UI (部分ビュー) の再利用を提供する手段として、サーバー サイド コード (私の場合は ASP.Net MVC) を使用していることに気付きました。 JavaScriptでかなりの量の作業。この特定のケースでは、私はまだ UI の作業を始めたばかりですが、jQuery と jQuery UI を使用すると、非常に小さなフットプリントで多くの機能を利用できます。

混合ソリューションを実現する上での課題の 1 つは、さまざまなロジックをどこに配置するかを考え出すことだと思います。その後、残りはおそらく、JavaScript と CSS コードをできるだけ多く再利用する方法を考え出すことになります。最終的に得られるさまざまな JavaScript アーティファクトを管理する方法をまだ理解していません (ただし、Google CDN は、jQuery、jQuery UI、および jQuery UI CSS リソースを提供することで、その多くを軽減します)。

于 2010-06-23T01:37:26.987 に答える