3

バックグラウンド

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);
    });
});
4

2 に答える 2

1

Collection Helper Meteor パッケージを使用して関数を追加するのはどうですか: https://github.com/dburles/meteor-collection-helpers/ ?

于 2015-06-15T01:04:17.357 に答える