Meteor 集合:新集合(null)和新集合({connection:null})之间有什么不同

Meteor 集合:新集合(null)和新集合({connection:null})之间有什么不同,meteor,Meteor,在Meteor.js中,如果我将代码同时放在客户端和服务器中: var col = new Collection(null); 这两者之间的区别是什么: var col = new Collection('someName',{connection:null}); 从文件中: 新Meteor.Collection(名称,[选项]) 名称字符串:集合的名称。如果为null,则创建非托管(非同步)本地集合 连接对象 将管理此集合的服务器连接。如果未指定,则使用默认连接。传递调用DDP的返回值。连

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

var col = new Collection(null);
这两者之间的区别是什么:

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

新Meteor.Collection(名称,[选项])

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

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

从它所说的,上面的代码似乎是一样的:在客户端和服务器上都有两个未连接的集合。但为什么需要两种不同的方法才能产生相同的结果呢。我的观点是,名称并不重要,因为它们没有连接(不需要发送DDP消息,这需要指定集合名称。)
我错过什么了吗?谢谢。

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

在服务器上
newMeteor.Collection('someName',{connection:null})
也只存在于内存中,但可以在发布函数中使用,就像数据库支持的集合一样。接收数据的客户端集合是使用
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;

您仍然需要对集合使用允许/拒绝规则以允许客户端方法工作。如果您发现自己正在使用此黑客,您应该。

这里也有同样的想法。顺便说一句,你可能会得到一个更好的用户名:)@user728291我相信你的答案更好,所以我刚刚删除了我的。FWIW,我似乎无法在客户端上对这些集合进行更改。客户端从服务器接收更新,但是如果他们进行了更改,meteor会在控制台中打印“更新失败:找不到方法”,其他客户端不会收到更改。谢谢@bill burdick,你说的没错。我写信来修复这个问题,但是开发团队已经关闭了它。如果你有一个好的用例,他们可能会给予更多的考虑。谢谢@user728291,这是一个非常有用的提示。我真的不明白为什么Meteor默认不实现它。