-1

次のオートフォームフックコードがあります。method.call の外で値を取得するにはどうすればよいですか。

私の問題は、method.call を実行すると、'chi' 値が定義されていないことです。一方、サーバーには「1」レコードがありますが、chi は「myResult」値を取得しません。method.call をコメントアウトして「Gogo」を返すと、「chi」はこの値を正しく取得します。私が間違っていることと、それを修正する方法を教えてもらえますか。

コード:

    before: {
    method: function(doc) {
        var retVal = false ;
        var pai = Q.fcall(function(){
            if(!_.isEmpty(doc) && _.pick(doc, 'name') ) {
                console.log('Ist level, true condition: ', doc);
                return true;
            }
            else{
                console.log('Ist level, false condition: ', doc);
                return false;
            }
        })
            .then(function(check){
                console.log('Check value: ', check);

                if( check ){
                 Meteor.call('CategoryNameAvailable', doc.name, function (error, result) {

                        console.log('Returned result from server', result);
                        if (!result) {
                            if(Contexts.Category.keyIsInvalid('name')){
                                Contexts.Category.resetValidation('name');
                            }
                            console.log('Returned result from server inside if condition  ', result);
                            Collections.Category.simpleSchema().namedContext("CategoryInsertForm").addInvalidKeys([{
                                name: "name",
                                type: "notUnique"
                            }]);

                            console.log('Doc value in meteor call function: ', doc);
                            Session.set('retVal', true);
                            console.log('retVal value in meteor call function: ', retVal);
                        }
                        return 'myResult';
                    });
                    // return 'Gogo';
                    /*  Meteor call End  */
                }

            })
            .then(function(chi){
                console.log('Chi value: ', chi);
            })
            .done();

        console.log('Pai value-2: ', pai);

    }  /* End of  method */
} /* End of 'before' hook */
4

2 に答える 2

0

メソッドを定義しているファイルに追加できると思いますか? 最近似たようなことをしようとして同様の問題がありましたが、それはメソッド定義のフォーマットに関係していました。

私にとっては、メソッド定義内でデータを返す場所が間違っていました。別の同様の問題の別の例では、クライアント側でコレクションをサブスクライブしていませんでした。

それが問題ではなく、呼び出しがデータを正しく返し、呼び出しのコンテキストの外にデータを渡さないだけの場合は、Session.set を使用してセッション変数を定義し、データが必要なときにいつでも呼び出すことができます。 .

メソッド定義のコンテキストがなければ、何が起こっているのかを正確に伝えるのは難しいでしょう。

于 2015-04-28T06:51:43.397 に答える