7

dojo.store.ObservableにあるようなObservableweapperを使用してdojoでJsonRestストアを使用する方法を知っている人はいますか?

ストアを実装してObservableとして機能させるには、サーバー側で何が必要ですか?クライアント側はどうですか?ドキュメントにはhttp://dojotoolkit.org/reference-guide/1.7/dojo/store/Observable.htmlと書かれています

JsonRestストアのようなサーバー側ストアを使用している場合、更新オブジェクトをクエリに適切に含めたり除外したりするには、queryEngineを提供する必要があります。queryEngineが使用できない場合、observeリスナーは未定義のインデックスで呼び出されます。

しかし、私はそれらが何を意味するのか分かりません。私は自分でストアを作成したことがなく、queryEngineに100%精通していません(正直なところ、少し混乱しています)。queryEngineが必要なのはなぜですか?ドキュメントは「未定義のインデックス」とはどういう意味ですか?そして、JsonRestストアのqueryEngineをどのように記述しますか?他のユーザーもデータを変更する可能性があるため、監視可能なRESTストアに何らかのWebソケットを使用するべきではありませんか?

混乱している!

4

1 に答える 1

4

この質問は少し古いと思いますが、今後の参考のためにいくつかの情報を以下に示します。これは複数の部分からなる質問なので、いくつかに分けて説明します。

1) JsonRest のサーバー側実装

JsonRest Store のサーバー側の実装に関するかなりまともな記事があります。JsonRest が生成するヘッダーと、残りに含まれるコンテンツを正確に示します。これは、JsonRest API が HTTP に変換される方法のメンタル モデルを形成するのに役立ちます。

2) クエリ エンジン

同じページの前半で、query() がクライアント側でどのように機能するかが説明されています。基本的に、query()関数はオブジェクト リテラル (例: ) を受け取り、それらの条件に一致するストア内{title:'Learning Dojo',categoryid:5}のオブジェクトを返すことができる必要があります。「ストア内」とは、サーバーではなく、クライアントのメモリに既にロードされていることを意味します。

何をしようとしているのかにもよりますが、おそらく独自の queryEngine を記述する必要はありません。独自のカスタム ストアを構築する場合は、組み込みの SimpleQueryEngine を使用してください。エンジンにオブジェクト リテラルを渡すだけで、dojo query() API 全体が追加されます。

3) オブザーバブル

私の理解では、Observables は、オブジェクトのコレクション (例: 結果の追加または削除) または特定のオブジェクト内 (例: 投稿 5 でタイトルが変更された) のクライアント側の変更を監視します。サーバー側で発生する変更は監視しません。ページのすべての側面が同期されたままになるように、データが変更されたことをクライアント側アプリの他の側面に通知するメカニズムを提供するだけです。

「コレクション データ バインディング」および「オブジェクト データ バインディング: dojo/Stateful」という見出しの下に、Observable の使用に関する全体的な記事があります。

4) 並行性

クライアント側のデータとサーバー側のデータの同期を維持するには、次の 2 つのことを行う必要があります。a) サーバー上の他のユーザーからの変更をポーリングする、b) トランザクションを使用してサーバーにデータを送信する。

a) データへの変更をポーリングするには、オブジェクト ストアで変数内のアクティブなクエリを追跡する必要があります。次に、setTimeout()またはsetInterval()を使用して、クエリをバックグラウンドで頻繁に実行します。アプリケーションのウィジェットまたはその他の側面が Observables を使用して、依存するクエリ結果セットの変更を監視していることを確認してください。そうすれば、他のユーザーによるサーバー上の変更は、アプリケーション全体に自動的に反映されます。

b) トランザクションを使用して、組み合わせる必要があるアクションを組み合わせます。次に、サーバーが HTTP 200 ステータス コード (「正常に動作しました!」を意味します) を送り返すことを確認します。トランザクションが 400 秒で HTTP ステータスを返した場合、何らかの理由で機能していません。バックエンドで何かが変更されたため、データを再クエリする必要があります。たとえば、更新したいレコードが削除されたため、更新できません。「トランザクション」という見出しの下にも、トランザクションに関する記事があります。

于 2013-01-23T18:18:20.747 に答える