2011-08-09 43 views
6

想知道訂閱我的CouchDB數據存儲庫的最佳方式,以便如果沙發文檔中的文檔已更新,則KO視圖也將更新(自動)。這是甚至可能的嗎?在CouchDB中使用Knockout.js - 在更改時更新

下面是我到目前爲止,它只是從user_info文件獲取用戶名。

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

任何幫助將不勝感激!

+1

可以使用映射插件通過JSON更新視圖模型。見http://knockoutjs.com/documentation/plugins-mapping.html 在你的情況下,它將在getJson回調 – Martijn

+0

@Martijn ko.mapping.fromJS(數據,this.ArrayOfModels),謝謝你,我已更新原始帖子。雖然這仍然不能解決問題,因爲當user_info文檔被更新(由另一個用戶或其他用戶)時,viewModel對象沒有得到更新(除了通過頁面刷新) – crawf

+0

您想要將數據從服務器到客戶端?在Windows平臺上,我會使用setTimeOut來檢查新的更新regualry。然而,一個非常有趣的項目是nowjs(http://www.nowjs.com/)如果您有可能使用該平臺,您可以編寫: now.receiveMessage = function(data){ ko.mapping.updateFromJS(視圖模型,數據); }; – Martijn

回答

5

CouchDB在文檔更改時支持通知:changes feed

您可以查詢變化喂,有?since=X參數,因爲X.

只接收更新,還可以通過「長輪詢」的飼料中加入&feed=longpoll。如果沒有變化,CouchDB將收到您的查詢,但直到最終發生變化時纔會回答。

或者,您可以通過添加&feed=continuous來獲得完整的COMET樣式的Feed。這與longpoll類似,但是CouchDB將從永遠不會關閉連接。每次發生變化時,它都會向您發送JSON,然後繼續等待。

最後,您可以通知時什麼變化在數據庫中,也可以指定一個Javascript過濾器到服務器(&filter=designdoc/filtername)上運行。如果過濾器批准,您將只收到通知。

+0

感謝您的建議,我對事情的CouchDB一面感到非常滿意(已經玩了一段時間)。奇怪的是,我從來沒有能夠得到連續的飼料工作,但我正在使用longpoll方法。我更多地瞭解了關於Knockout方面的一些信息,並且看到模型是否可以在源代碼(CouchDB)更改時自動更新。我已經編寫了手動執行此操作的代碼。 感謝您的詳細帖子! – crawf

+0

連續提要無法正常工作的最可能的原因是您用於讀取它的客戶端庫不會爲您返回值,直到服務器響應完成* - 按定義&feed =連續是*永遠不會*完成。 – natevw

+0

好點,雖然我不是前端專家,但我的理解是,使用XMLHttpRequest直接使用部分響應的唯一方法。 – JasonSmith

1

你看過http://hood.ie/它很好。我也在我的couchdb內運行連帽衫作爲os_daemons服務。

這很好。