使用流星,我不知道如何最好地處理共享同一服務器端的數據庫收集不同的客戶端集合。請看下面的例子:我有一個User
收集,並在我的客戶端我有個朋友用戶的名單,我必須執行的整個用戶數據庫的查詢,返回的用戶名的列表中的搜索功能匹配查詢。流星發佈/訂閱策略,獨特的客戶端集合
在發佈服務器端方法,我對同一個集合兩個查詢返回不同的文件集。這些數據是否應該在客戶端分成兩個集合?或者是否所有與兩個查詢匹配的用戶文檔都在同一個集合中?如果是後者,我會複製用於服務器端和客戶端查詢的代碼嗎?
在服務器上:
Meteor.publish('searchResults', function(query){
var re = new RegExp(query, 'i')
return Users.find({ 'name' : {$regex: re}})
})
在客戶端:
Session.set('searchQuery', null)
Meteor.autosubscribe(function(){
Meteor.subscribe('searchResults', Session.get('searchQuery'))
})
Template.search.events = {
'keyup #user-search' : function(e){
Session.set('searchQuery', e.target.value)
}
}
_.extend(Template.search, {
searchResults: function() {
var re = new RegExp(Session.get('searchQuery'), 'i')
return Users.find({ 'name' : {$regex: re}})
}
})
這似乎是一個合理的解決方案,但不是最佳的一個。如果我想創建一個由多個服務器端集合中的搜索結果組成的新客戶端集合,該怎麼辦?
只是想記下我的流星如何「融合」的信息記錄可能不準確或真。如果一個流星的開發者或者更好的人可以確認,請做。我的假設是基於我個人的觀察。 – matb33
看起來我的觀察結果是正確的。請參閱此答案中的「合併框」部分:http://stackoverflow.com/a/13867122/962223 – matb33
當我將搜索功能放入共享文件夾時,例如lib的發佈功能可以找到它們。當我將它們放在與發佈函數相同的文件中時,它們是由發佈函數發現的,但在客戶端上不可見。想法? – cramhead