2016-05-28 9 views
1

私は新しい流星1.3.1のかなり新しいです。だから私は以前にヘルパーと仕事をしたことはありません。コントローラ内のヘルパーにアクセスする方法とfind()が空である理由

これは私のヘルパーです:

this.helpers({ 
    questions() { 
     return Questions.find({categoryId: this.categoryId}); 
    } 
}); 

最初の質問:私はそれ自身のコントローラ内にこのヘルパー(questions)にアクセスするにはどうすればよいですか?私は$scope.questionsthis.questionsおよびthis.play.questionsplayはコントローラのエイリアスです)を試しました。すべてはundefinedです。 私の見解では、私はng-repeat='question in play.questions'と反復し、正常に動作します。

次に、コントローラでヘルパーにアクセスできない可能性があります。だから私はこれを試しました: this.questions = Questions.find({categoryId: this.categoryId});

しかし、ここで私は空のカーソルを取得します。それがどんなアイデアなのか?

答えて

2

私はあなたのコントローラ機能であり、あなたが

this.questions = Questions.find({category: this.categoryId}); 

を行う前に、あなたは

$reactive(this).attach($scope) 

を使用していると仮定? this.questionsを設定した時点で、ヘルパーを使用していないときにカーソルが空になっている理由の1つは、サブスクリプションが準備できていない可能性があります。したがって、この割り当てをthis.autorunの中にラップすることで反応させる必要があります。これにより、クライアント側のコレクションにデータが移入されるとすぐにカーソルが更新されます。

あなたのコントローラ内からヘルパーを呼び出す代わりに、共通の関数を抽出してヘルパー内で使用し、必要に応じてそれを使用する必要があります。私が間違っていない場合、ヘルパーは実際にUIにデータを取得するためにのみ使用されます(< - ?)。

+0

ほぼ満足です。 'this.autorun'はヘルパーなしでデータを取得するのに役立ちました。そして、私はあなたがそうだと思うのは、ヘルパーはUIのためだけだと思います。ありがとう。 – Fabic

+0

@Fabicしかし、私はまだコントローラでこれらのカーソルをどのように操作するのか分からなかったのですか?コントローラーのカーソルを反復する方法の例を教えてください。 – Priyanka

+0

@Priyankaあなたは 'this.questions.forEach(function(item){//処理項目}')を実行するだけです。あるいは、 'this.questions.fetch()'を実行すると、いつものように繰り返し処理できる配列が得られます。 – Fabic

関連する問題