0

出于某种原因,升级到 0.5.9 后,我遇到了服务器端似乎可以正确发送所有内容的问题,但是客户端却说它什么也没收到。

//服务器:

Meteor.publish("orders", function (ordersQueryParams) {
    console.log("orders publish: " + JSON.stringify(ordersQueryParams));
    if (this.userId && ordersQueryParams){
        console.log("orders collection: " + Orders.find({"customer._id": this.userId}, ordersQueryParams).count());
        return Orders.find({"customer._id": this.userId}, ordersQueryParams);
    }
});

//客户:

var ordersPreferences = {
                table: {
                    size: 10
                },
                query: {
                    sort: {createdDate:-1},
                    skip : 0,
                    limit : 10
                }
            };
Session.set("ordersPreferences", ordersPreferences);
Meteor.autorun(function(){
   var ordersPreferences = Session.get("ordersPreferences");
   console.log('subscribing to orders');
   Meteor.subscribe("orders", ordersPreferences.query);
}

//两个都:

Orders = new Meteor.Collection("orders");
Deps.autorun(function(){
    if (Meteor.isServer)
        console.log("on server orders count is " + Orders.find().count());
    if (Meteor.isClient)
        console.log("on client orders count is " + Orders.find().count());
});

服务器日志:

on server orders count is 26
orders publish: {"sort":{"createdDate":-1},"skip":0,"limit":10}
orders collection: 26

客户端日志:

subscribing to orders
on client orders count is 0 

为什么服务器说有26 个文档,但客户端坚持0

这让我发疯:(

4

1 回答 1

0

我发现了问题:

我正在“等待”我Meteor.user()的可用并且有这个autorun

Meteor.autorun(function(handle){
            var ordersPage = new OrdersPage();
            if (Meteor.user()) {
                ordersPage.init();
                ordersPage.autorun();
                handle.stop();
            }
            });
        if (Meteor.user()) {
            return "orders";
        }

一旦Meteor.user()找到这个函数就不需要运行了,因此我有了handle.stop(). 显然,从 0.5.9 开始handle.stop(),不仅立即停止,autorun而且还停止了下面的所有内容(包括集合)。

可能是 Meteor 中引入的一个错误......或者可能是一个新功能。

于 2013-03-29T21:28:41.133 回答