2016-11-12 9 views
0

私のプロジェクトでは、たくさんのヘルパーメソッドを使用しています。それらのうちのいくつかは、クライアント側のAPIの制限(別個の機能!)のために、コレクション全体をクライアントにロードする必要があります。私は問題を探って、解決策としてMeteor.methodsを見つけました。angular-meteorヘルパーとMeteor.methodsの併用方法

メテオールメソッドにヘルパー(this.helpersなど)を使用できますか?または、フロントエンドでデータをどのように動的に更新する必要がありますか? 誰かが私に例を挙げることはできますか?

追加情報:

class View2 { 
constructor($interval, $scope, $reactive) { 
    'ngInject'; 
    $reactive(this).attach($scope); 
    this.helpers({ 
     getOrderNumber(){ 
      this.tempVar = Kafkadata.find().fetch(); 
      this.tempVar2 = _.pluck(this.tempVar, 'orderNumber'); 
      this.tempVar3 = _.uniq(tempVar2, false); 
      return this.tempVar3; 
     }, 
    }); 
} 

これはヘルパークエリの例です。現在、このコードはクライアント側で実行されています。私はすべての注文(tempvar)を取得し、ordernumbers(tempvar2)を除くすべてのデータを削除します。最後に、すべての複数の注文番号を削除します。 ordernumberは一意の値ではありません。私はdb.collection.distinct()のような機能を利用したい

{"orderNumber":"f2a3ed95-fcc3-4da0-9b3f-32cf5ed087f8","value":12480,"booleanValue":false,"intValue":12480,"doubleValue":0,"status":"GOOD","itemName":"MILLING_SPEED","timestamp":1479145734448,"_id":{"_str":"5824f4bc7ff3f0199861f11d"}} 

:ここではコレクションの一つの例です。しかし、彼らはサーバー側でのみ動作します。私はMeteor.methods()を使ってこのことをサーバー側にしなければならないと思います。しかし、このヘルパーはどう機能しますか? Meteor.methods()でどのように動作しますか?

EDIT2:

私のテスト: クライアント・サイド:

フォルダ:MyProjectと/サーバー フォルダ:サーバー側でmyproject /輸入/ UI/VIEW1

class View1 { 
constructor($interval, $scope, $reactive) { 
'ngInject'; 
$reactive(this).attach($scope); 
this.helpers({ 
// some code 
    getTestData(){ 
      Meteor.call('allTestData',function(error, result){ 
       if(error){ 
        console.log("error"); 
       }else{ 
        return result; 
       } 
      }); 

     } 

}); //end of contructor 

// this is my testfunction, which is bound to a button! 
testFunction(){ 
    Meteor.call('allTestData',function(error, result){ 
     if(error){ 
      alert('Error'); 
     }else{ 
      console.log(result); 
     } 
    }); 
} 

/main.js

Meteor.methods({ 
    allTestData:()=>{ 
    var results=Kafkadata.find().count(); 
    console.log(results); 
    return results; 
}, 

});

、これが私のview1.htmlです:

//some code 
<md-button ng-click="view1.testFunction()"> It works!</md-button> 
<h1>{{view1.getTestData}}</h1> 

はなぜボタンの仕事ではなく、ヘルパーのでしょうか?

+0

あなたの問題の詳細を教えてくださいできますか?達成したい処理を記述し、使用しているテーブルに名前を付けることができます。それは正しい軌道に乗ることを容易にします – Mikkel

+0

あなたの答えをありがとう。私はいくつかの追加情報を追加しました。彼らが私を助けてくれることを願っています:D。 – tiga05

答えて

0

.distinctはMongoでサポートされていますが、Meteorはサーバー上でも公開していません。例に示すように、_.uniqを使用するだけでよいのですが、パフォーマンス上の理由から、サーバ上で動作する方が良いでしょう。コード内this.getReactively(「this.selectedWeek」)の使用が...基本的にこれを実行するために流星を伝え

aweek:() => { 
    if (debug) 
     console.log("Querying weekly appointments for "+this.selectedWeek.format("Do MMMM")); 
    var weekApts = Appointments.find(
     {start: {$gte: new Date(this.getReactively('this.selectedWeek').clone().day(1)), 
       $lt: new Date(this.getReactively('this.selectedWeek').clone().endOf('week'))}, 
       elderid: Meteor.userId() 
    }).fetch(); 
    return utils.services.getAWeek(weekApts,utils.data.elderTimeFormat); 
}, 

注:以下は

は、私が使用するヘルパーの一例ですこのヘルパーは反応的なので、this.selectedWeekの値が変更された場合、ヘルパーが再実行されます。したがって、カレンダーで1週間をクリックして変数を更新すると、データを取得するためにヘルパーが再度実行されます。

utils.services.getAWeek()関数は、表示しやすいデータ配列の計算と書式設定を行います。

処理を行うためのメテオメソッドを作成した場合は、その結果でコレクションを更新するようにして、クライアント上のヘルパーが自動的に更新されます。最高の技術をあなたのために仕事をしてください:)

+0

これを後で試して報告します。ありがとうございました! – tiga05

+0

こんにちは、 @Mikkel 私はほぼ解決しました!ボタンでそれは素晴らしい作品です。しかし、私はヘルパーを使いたいと思っています。それは何も表示されません:-(何が間違っていますか?私は最初の投稿を編集しました – tiga05

+0

私はあなたと共有したコードはすでにヘルパーです。サーバー – Mikkel

関連する問題