2011-08-09 8 views
6

私のCouchDBデータストアを購読する最良の方法については不思議ではないので、ソファのドキュメントが更新されるとKOビューも(自動で)更新されます。これは可能なのでしょうか?Knockout.jsをCouchDBで使用 - 変更時に更新する

これまでのところ、user_infoドキュメントからユーザー名を取得するだけです。

$.getJSON('http://localhost/couchdb/user_info', function(data) { 
    var viewModel = ko.mapping.fromJS(data); 
    ko.applyBindings(viewModel);  
}); 

任意の助けいただければ幸いです!

+1

viewmodelは、マッピングプラグインを使用してJSON経由で更新できます。 http://knockoutjs.com/documentation/plugins-mapping.html を参照してください。getJsonコールバックでko.mapping.fromJS(data、this.ArrayOfModels)となります。 – Martijn

+0

@Martijn、ありがとう、元の投稿で更新しました。これはまだ問題を解決していませんが、user_infoドキュメントが更新されたとき(別のユーザーなど)には、viewModelオブジェクトは更新されません(ページリフレッシュ以外で) – crawf

+0

データをプッシュしたいクライアントへのサーバー? Windowsプラットフォームでは、私は新しい更新regualryをチェックするためにsetTimeOutを使用します。しかし、非常に興味深いプロジェクトはnowjs(http://www.nowjs.com/)です。そのプラットフォームを使用する可能性がある場合は、次のように書くことができます: now.receiveMessage = function(data){ ko.mapping.updateFromJSビューモデル、データ); }; – Martijn

答えて

5

CouchDBは、文書が変更されたときの通知をサポートします。changes feed

あなたは変更はあなたがすることができますまた、「長いポーリング」X.

ので、更新のみを受け取るために?since=Xパラメータで、&feed=longpollを追加することにより、フィードを養うポーリングすることができます。まだ変更がない場合、CouchDBはクエリを受信しますが、最終的に変更が行われるまで答えません。

または、&feed=continuousを代わりに追加することで、完全なCOMETスタイルのフィードを作成できます。これはlongpollに似ていますが、CouchDBはになりません。は接続を閉じます。変更が発生するたびにJSONが送信され、待機します。データベース中のとき変更

は最後に、あなたに通知することができ、またはサーバー(&filter=designdoc/filtername)上で実行するJavascriptのフィルタを指定することができます。フィルタが承認された場合にのみ、通知を受け取ります。

+0

あなたの提案に感謝します。私は事のCouchDB側にかなり満足しています。不思議なことに、私は決して連続したフィードを稼働させることはできませんでしたが、longpollメソッドを使用しています。私は物事のノックアウトの側面に関するいくつかの情報の後に、モデルがソース(CouchDB)が変更されたときに自動的に更新できるかどうかを確認しました。私はすでにこれを手動で行うコードを書いています。 詳細な投稿ありがとうございます! – crawf

+0

連続したフィードがうまくいかない理由は、それを読むために使用しているクライアント側のライブラリが、サーバーの応答が*完全なものになるまで値を返すことではないということです - 定義では&feed = continuousは* never * complete 。 – natevw

+0

良い点です。フロントエンドのエキスパートではありませんが、部分的なレスポンスで作業する唯一の方法は、XMLHttpRequestを直接使用することです。 – JasonSmith

1

あなたはhttp://hood.ie/を見たことがありますか?私もcouchdb内からos_daemonsサービスとしてhoodieを実行しています。

いいですね。

関連する問題