2012-02-20 8 views
3

テーブルに顧客のリストを表示するWebアプリケーションを構築しています。表には、これらの顧客に関するさまざまなデータを含む約15の列があります。表のセルは頻繁にユーザー入力を受け取り、値を更新します。JavaScript + jQuery WebアプリケーションでモデルデータとUIをリンクするためのベストプラクティス

ページが読み込まれると、Webアプリケーションは、すべてのアクティブな顧客のうち適切なサブセットを取得するための修飾子付きAJAXリクエストを送信します。 JSONは返され、オブジェクトのグローバル配列に拡張されます。このグローバルなオブジェクト配列の各項目は、表の行を表します。var myCustomerList = [{customer_data_object_1}、{customer_data_object_2}、{customer_data_object_3}]。

ページのHTMLは、JavaScript、jQuery、およびmustache.jsテンプレートを使用して生成されます。 JavaScriptは、グローバルデータオブジェクト(すなわち、myCustomerList [i])をループし、行を生成する。 IはmyCustomerListに後列自体をリンクするためにjQueryの.DATA()メソッドを使用して[I]:

$('#tbl_customer_list tr:last').data('cust_data',myCustomerList[i]);

各セルはjQueryのを使用して行に付加されているように、私はUIコントロールにイベントをバインド:

 
$('#tbl_customer_list tr:last td:last a').on('click',function(event) { 
    custList.cellEvent.status.openDialog(this,event); 
}); 
私はDBのテーブル上のデータとグローバルデータオブジェクトに対して行われた和解の変更のために別々のコードを持って

 
custList.cellEvent.status.openDialog = function(oLink,event) { 
    var oCustData = $(oLink).closest('tr').data('cust_data'); 

    //update the global data object 
    oCustData.status = oLink.value; 
} 

イベント処理関数は、jQueryの.dataセクションを()を使用して、戻って私のグローバルデータオブジェクトへの参照してください。 。 https://sites.google.com/site/jollytoad/mvcusingjquery

ので、二つの質問:より良い

  1. は何上記のあなたを混同している場合

    は、このページでは私が取るしようとしているクライアントサイドMVCのアプローチの良い概要を説明しますモデルデータ(ブラウザ側)をページ上のさまざまなUIコンポーネントにリンクする方法?テーブル行DOM要素とグローバルデータオブジェクトの間にリンクを作成するには、.data()を使用していることを覚えておいてください。

  2. モデルデータ(つまり、myCustomerList)を整理して保存するにはどうすればよいですか?

私が今やっていることは動作しますが、ちょっとハッキリしているようで、グローバルな名前空間を汚染しています。このページに戻って顧客リストとは独立したウィジェットを追加しなければならない場合、私はどのようにサポートして維持できるか分かりません。

私は顧客リストテーブル全体(およびページに追加された他の新しいウィジェットの新しいクラス)のクラスを作成し、そのクラスのプロパティにモデルデータを保存することを検討してきました。しかし、私はこの分野のベストプラクティスについていくつかのヒントを得るためにまずここに来ると思った。

答えて

2

BackboneSpineJavaScriptMVCなどのような種類のものを処理するためのフレームワークを使用してください。

私はこのすべてのものを処理するためにバックボーンを使用します。これは、jQueryとうまく統合されています。

+0

新しいMyView({model:mymodel})でビューの新しいインスタンスを作成したとき、 – tkone

1

私はあなたの代わりに、このを見てみるべきだと思う:

http://addyosmani.com/largescalejavascript/

それは、ウェブサイトのさまざまな部分を処理するためのモジュール式の模様です。このパターンはウェブサイトの一部を互いに独立させる。各モジュールはそれ自身のMVCを持ち、自身の状態を格納することができます。モジュールにはアプリケーションの完全なロジックがありません。サンドボックスAPIとコアAPIによって処理されます。


私の知る限り、AJAXを使用してサーバーからテーブルのデータを読み込みます。私があなたに提案するのは、そのテーブルを独立したモジュールにすることです。

  1. それはAJAXのデータを受信したときに、オブジェクトその後

  2. に保管してくださいあなたのテーブルには、そのオブジェクトに基づいて、テーブルにデータを格納しレンダリングします。あなたがテーブルに入れたものは、単にビジュアルデータです。実際のデータはそのオブジェクトに早期に残ります。

    アイテムをクリックするたびに、その中のデータは、元のオブジェクトに影響を及ぼすものは元のオブジェクトに影響を与えます。

+0

が私の答えを更新しました。確認してみてください。 – Joseph

+0

私は '.data()'を使って保存されたデータが元のオブジェクトへの参照を保持できることを知りませんでした。私はちょうどここで確認した:http://jsfiddle.net/LnHac/ - 要素に格納されたデータで何をするにしても、最初に参照したグローバルオブジェクトに反映されます。 – Joseph

0

ボリス・ムーアは、現在、データバインディングを行うと、レンダリングの「公式」jQueryUIの道であるJsViews & JsRenderに取り組んでいます。それはすでに使用可能で、すぐにベータ版になります。

関連する問題