バックグラウンド
angular-meteor アプリと mongodb にビジネス オブジェクトのコレクションがあります。
{ startDate: new Date(2015, 1, 1), duration: 65, value: 36 }
このデータをさまざまなビューでレンダリングしたいと考えています。ビューの 1 つはグラフで、もう 1 つはエントリのリストです。エントリのリストは簡単です。コレクションをモデルにバインドするだけです。
vm.entries = $scope.meteorCollection(MyData, false);
ビューでは、私は次のことを行います:
<div ng-repeat="entry in vm.entries">{{entry.startDate}} - ...</div>
しかし、今はグラフです。{ x, y }
各要素をオブジェクトに変換し、次のようなビューを提供したいと考えています。
vm.graphPoints = transformData(getDataHere());
問題は、データがここで取得されないことです。angular-meteorentry in vm.entries
では、ビューで を呼び出すときに取得されるように見えます。キッカーは、transformData
メソッドがデータをループし、各アイテムのインデックスを他のアイテムにループして、結果の x、y を計算する必要があることです。したがって、単純な forEach ループを使用することはできません (何らかの方法で他のアイテムにアクセスする必要はありません)。
質問
では、どうすればコントローラーでデータをフェッチして変換し、データベースに追加された新しいデータに対して一方向のバインディング (観察) を行うことができますか?
ありがとう
アップデート
次のコードは機能しますが、変更があるたびにコレクション全体を取得すると、パフォーマンスの問題が発生する可能性があると思います。
$scope.$meteorSubscribe("myData").then(function() {
$scope.$meteorAutorun(function() {
var rawData = MyData.find().fetch();
vm.model.myData = transformData(rawData);
});
});