在Meteor.js中,如果我将代码放在客户端和服务器中:
var col = new Collection(null);
有什么区别:
var col = new Collection('someName',{connection:null});
来自文档:
new Meteor.Collection(name,[options])
name 字符串:集合的名称。如果为null,则创建一个非托管(非同步)本地集合。
连接对象 将管理此集合的服务器连接。如果未指定,则使用默认连接。传递调用DDP的返回值。连接以指定其他服务器。传递null以指定无连接。
从它的内容来看,似乎上面的代码是相同的:在客户端和服务器上都有两个非连接的集合。但为什么它需要有两种不同的方式来产生相同的结果。我的观点是名称无关紧要,因为它们没有连接(不需要发送DDP消息,需要指定集合名称。) 我错过了什么吗?感谢。
答案 0 :(得分:6)
我的理解是new Meteor.Collection( null )
适用于您不想发布的本地集合。您仍然可以发布它,但您必须使用发布的内部“已添加”,“已删除”和“已更改”功能来指定客户端上的哪个集合获取数据。客户端需要创建一个命名集合来接收数据,但所有db方法(如'remove'或'update')都会出错,因为它们在服务器上不存在。
在服务器new Meteor.Collection( 'someName', {connection: null} )
上也只存在于内存中,但可以在发布函数中使用,就像db支持的集合一样。接收数据的客户端集合正常使用new Meteor.Collection( 'someName' )
创建,客户端无法知道此集合仅在服务器内存中。
在客户端上,我认为'null'命名和'null'连接都是获取无法从服务器接收/发送数据的集合的方法。
更新:使用{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。