编辑:这个问题,一些答案,和一些评论,包含了大量的错误信息。 了解Meteor集合,出版物和订阅如何正确理解发布和订阅同一服务器集合的多个子集。 如何在服务器上将单个集合的不同子集(或“视图”)作为客户端上的多个集合发布? 下面是一些伪代码来帮助说明我的问题: items集合在服务器上 假设我在服务器上拥有数百万条logging的items集合。 我们还假设: 50条logging的enabled属性设置为true , 100条logging的processed属性设置为true 。 所有其他人被设置为false 。 items: { "_id": "uniqueid1", "title": "item #1", "enabled": false, "processed": false }, { "_id": "uniqueid2", "title": "item #2", "enabled": false, "processed": true }, … { "_id": "uniqueid458734958", "title": "item #458734958", "enabled": true, "processed": true } 服务器代码 让我们发布相同服务器集合的两个“视图”。 一个会发送50个logging的光标,另一个发送100个logging的光标。 在这个虚拟的服务器端数据库中有超过4.58亿条logging,客户端不需要知道所有这些(事实上,发送它们全部可能在这个例子中需要几个小时): var Items = […]
所以,一位同事向我介绍了发布/订阅模式(在JS / jQuery中),但是我很难理解为什么要在普通的JavaScript / jQuery上使用这种模式。 例如,以前我有以下代码… $container.on('click', '.remove_order', function(event) { event.preventDefault(); var orders = $(this).parents('form:first').find('div.order'); if (orders.length > 2) { orders.last().remove(); } }); 我可以看到这样做的好处,例如… removeOrder = function(orders) { if (orders.length > 2) { orders.last().remove(); } } $container.on('click', '.remove_order', function(event) { event.preventDefault(); removeOrder($(this).parents('form:first').find('div.order')); }); 因为它引入了对不同事件removeOrderfunction的能力 但是,为什么你会决定实施发布/订阅模式,如果它做了同样的事情,那么去下面的长度? (仅供参考,我用jQuery的小酒馆/子 ) removeOrder = function(e, orders) { if (orders.length > […]
观察者模式 , 发布/订阅和数据绑定有什么区别? 我search了一下,所以没有find任何好的答案。 我曾经相信的是,数据绑定是一个通用的术语,实现它的方式有很多,例如Observer Pattern或者Pub / Sub模式。 通过Observer模式,Observable可以更新观察者。 通过发布/订阅,0多个发布者可以发布某些类别的消息,并且0多个订阅者可以订阅某些类别的消息。 还有其他模式实现“数据绑定”?
麻烦从文档充分理解这个例子…我试着运行它一堆不同的方式,所以我可以观察它是如何工作的,等等。 你如何订阅这个? 我们是否可以包含使这项工作所需的客户端代码? 有一个名为messages-count的集合吗? Room是一个消息的集合吗? 我们可以在示例中包含集合定义吗? 任何提示,这将是伟大的! 注意 :这是最初发布此问题时出现的代码(2012年5月)。 现在更简单了。 // server: publish the current size of a collection Meteor.publish("messages-count", function (roomId) { var self = this; var uuid = Meteor.uuid(); var count = 0; handle = Room.find({room_id: roomId}).observe({ added: function (doc, idx) { count++; self.set("messages-count", uuid, "count", count); self.flush(); }, removed: function (doc, idx) […]
我有一个简单的应用程序设置,显示Projects列表。 我已经删除了autopublish包,以便我不会将所有内容发送到客户端。 <template name="projectsIndex"> {{#each projects}} {{name}} {{/each}} </template> 当autopublish开启时,这将显示所有的项目: if Meteor.isClient Template.projectsIndex.projects = Projects.find() 随着它被删除,我不得不另外做到: if Meteor.isServer Meteor.publish "projects", -> Projects.find() if Meteor.isClient Meteor.subscribe "projects" Template.projectsIndex.projects = Projects.find() 那么,说客户端的find()方法只search从服务器端发布的logging是否准确呢? 它一直在绊倒我,因为我觉得我应该只调用find()一次。