Meteor.Collections:新Collection(null)和new Collection({connection:null})之间有什么不同

时间:2014-03-13 12:31:56

标签: meteor

在Meteor.js中,如果我将代码放在客户端和服务器中:

var col = new Collection(null);

有什么区别:

var col = new Collection('someName',{connection:null});

来自文档:

  

new Meteor.Collection(name,[options])

     

name 字符串:集合的名称。如果为null,则创建一个非托管(非同步)本地集合。

     

连接对象   将管理此集合的服务器连接。如果未指定,则使用默认连接。传递调用DDP的返回值。连接以指定其他服务器。传递null以指定无连接。

从它的内容来看,似乎上面的代码是相同的:在客户端和服务器上都有两个非连接的集合。但为什么它需要有两种不同的方式来产生相同的结果。我的观点是名称无关紧要,因为它们没有连接(不需要发送DDP消息,需要指定集合名称。) 我错过了什么吗?感谢。

1 个答案:

答案 0 :(得分:6)

我的理解是new Meteor.Collection( null )适用于您不想发布的本地集合。您仍然可以发布它,但您必须使用发布的内部“已添加”,“已删除”和“已更改”功能来指定客户端上的哪个集合获取数据。客户端需要创建一个命名集合来接收数据,但所有db方法(如'remove'或'update')都会出错,因为它们在服务器上不存在。

在服务器new Meteor.Collection( 'someName', {connection: null} )上也只存在于内存中,但可以在发布函数中使用,就像db支持的集合一样。接收数据的客户端集合正常使用new Meteor.Collection( 'someName' ) 创建,客户端无法知道此集合仅在服务器内存中

在客户端上,我认为'null'命名和'null'连接都是获取无法从服务器接收/发送数据的集合的方法。

Some discussion here


更新:使用{connection: null}的服务器上的集合未设置为客户端访问的方法。可以通过临时为集合创建连接并定义方法来设置这些方法。如下所示:

//server js
var serverOnly = new Meteor.Collection( 'serverOnly', {connection: null} );
serverOnly._connection = Meteor.server;
serverOnly._defineMutationMethods();
serverOnly._connection = null;

您仍然需要对集合使用允许/拒绝规则以允许客户端方法工作。如果您发现自己使用此hack,则应comment on the pull request that makes these methods available by default