在Meteor.js中,如果我将代码放在客户端和服务器中:
var col = new Collection(null);
Run Code Online (Sandbox Code Playgroud)
有什么区别:
var col = new Collection('someName',{connection:null});
Run Code Online (Sandbox Code Playgroud)
从文档:
新的Meteor.Collection(名称,[选项])
name String:集合的名称.如果为null,则创建非托管(非同步)本地集合.
connection Object将管理此集合的服务器连接.如果未指定,则使用默认连接.传递调用DDP的返回值.连接以指定其他服务器.传递null以指定无连接.
从它的内容来看,似乎上面的代码是相同的:在客户端和服务器上都有两个非连接的集合.但为什么它需要有两种不同的方式来产生相同的结果.我的观点是名称没关系,因为它们没有连接(没有必要发送DDP消息,需要指定集合名称.)我错过了什么?谢谢.
我的理解是,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;
Run Code Online (Sandbox Code Playgroud)
您仍然需要对集合使用允许/拒绝规则以允许客户端方法工作.如果您发现自己正在使用此hack,则应该注释使默认情况下这些方法可用的pull请求.
| 归档时间: |
|
| 查看次数: |
2313 次 |
| 最近记录: |