1

何らかの奇妙な理由で、iron-routerランダムに undefined が返されます。

this.route('pollyShow', {
    path: '/polly/:_id',
    template: 'polly_show',
    notFoundTemplate: 'notFound',
    before: function () {
        var id = this.params._id;
        var poll = Polls.findOne({_id: id});
        console.log(poll);
        var ip_array = poll.already_voted;
        $.getJSON("http://smart-ip.net/geoip-json?callback=?", function(data){
            ip_voted = ip_array.indexOf(data.host);

            if (ip_voted > -1) {
                Router.go('pollyResults', {_id: id});
            }
        });
    },
    data: function() {

        return Polls.findOne({_id: this.params._id});
    }
});

正常に返されることもあれば、未定義を返すこともあります。

これには何か理由がありますか?

4

1 に答える 1

0

この問題はPolly、ルートの実行時にコレクションが読み込まれる場合と読み込まれない場合があるために発生します。

この問題は、ルート構成でusingオプションを明示的に待機することで回避できます。subscriptionwaitOn


ドキュメントから:

デフォルトでは、新しい Meteor アプリには autopublish パッケージと安全でないパッケージが含まれており、これらは一緒になって、サーバーのデータベースへの完全な読み取り/書き込みアクセス権を持つ各クライアントの効果を模倣します。これらは便利なプロトタイピング ツールですが、通常、実稼働アプリケーションには適していません。準備ができたら、パッケージを削除します。

パッケージを削除するには、 を呼び出しますmeteor remove <package-name>

次に、サーバー上のクライアントで見たいレコードを明示的に公開する必要があります。

サーバー/publications.js :

Meteor.publish('all_of_polly', function () { return Polls.find({}); });

クライアントでサブスクライブします。

this.route('pollyShow', {
    path: '/polly/:_id',
    template: 'polly_show',
    notFoundTemplate: 'notFound',
    waitOn: function () { return Meteor.subscribe('all_of_polly'); }
    // ...
});
于 2014-02-20T18:09:42.253 に答える