Meteor.collection.find()的奇怪行为

时间:2014-11-25 13:49:15

标签: mongodb meteor iron-router

我在流星中遇到了奇怪的行为 - >铁路由器

this.route('addItem', {
        path: '/additem/:_owner',
        action: function(){
            var c = Presentation.find().count();
            var id = Presentation.insert({
                owner: this.params._owner,
                order: c
            });
            this.redirect('editItem', {_id: id});
        }

this.route('editItem', {
        path: '/edititem/:_id',
        data: function(){return Presentation.findOne(this.params._id)}
    });

在这种情况下,数据为空,但如果c为const(var c = 1),则一切正常:

this.route('addItem', {
        path: '/additem/:_owner',
        action: function(){
            var c = 1;
            var id = Presentation.insert({
                owner: this.params._owner,
                order: c
            });
            this.redirect('editItem', {_id: id});
        }

this.route('editItem', {
        path: '/edititem/:_id',
        data: function(){return Presentation.findOne(this.params._id)}
    });

2 个答案:

答案 0 :(得分:0)

演示文稿是客户端上的一个集合。它可能没有任何东西,Collection将与服务器设置在某个时刻发布的任何内容同步,它将在同步时反应性地更新依赖于它的东西,但是在路由中你只是假设它是同步的,这是高度的不太可能。你可以在你的路线上放一个等候。或者使用Meteor方法,或者执行服务器端路由。

答案 1 :(得分:0)

用Meteor metod解决了,但不明白(

下一个代码在控制台rigth vsriables中显示,但数据为空。

this.route('addItem', {
        path: '/additem/:_owner',
        action: function(){
            var c = Presentation.find().count();
            console.log('c: '+c);
            var id = Presentation.insert({
                owner: this.params._owner,
                order: c
            });
            this.redirect('editItem', {_id: id});
        }

this.route('editItem', {
        path: '/edititem/:_id',
        data: function(){console.log('doc: ' + Presentation.findOne(this.params._id)); 
                         return Presentation.findOne(this.params._id)}
    });