【问题标题】:Meteor.Collections : What the different between new Collection(null) and new Collection({connection:null})Meteor.Collections : new Collection(null) 和 new Collection({connection:null}) 有什么不同
【发布时间】:2014-04-18 04:41:29
【问题描述】:

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

var col = new Collection(null);

两者有什么区别:

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

来自文档:

new Meteor.Collection(name, [options])

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

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

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

【问题讨论】:

    标签: meteor


    【解决方案1】:

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

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

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

    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

    【讨论】:

    • 这里有同样的想法。顺便说一句,你可能会得到一个更好的用户名,as advised by Jon Skeet? :)
    • @user728291 我相信你的回答更好,所以我刚刚删除了我的。
    • FWIW,我似乎无法在客户端对此类集合进行更改。客户端从服务器接收更新,但如果他们进行更改,meteor 在控制台中打印“更新失败:找不到方法”,其他客户端不会收到更改。
    • 谢谢@bill-burdick,你是对的。我写了a pull request 来解决这个问题,但它已被开发团队关闭。如果您有一个好的用例,他们可能会给予更多考虑。
    • 感谢@user728291,这是一个非常有用的提示。我真的不明白为什么 Meteor 默认不实现它。
    猜你喜欢
    • 2011-05-13
    • 2010-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-02
    • 1970-01-01
    • 2011-11-22
    • 2016-05-30
    相关资源
    最近更新 更多