首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在angular-meteor中将业务对象转换为视图模型

在angular-meteor中将业务对象转换为视图模型
EN

Stack Overflow用户
提问于 2015-06-09 18:54:07
回答 2查看 267关注 0票数 3

背景

我在mongodb中有一个angular-meteor应用程序和一系列业务对象,例如:

代码语言:javascript
复制
{ startDate: new Date(2015, 1, 1), duration: 65, value: 36 }

我想在不同的视图中呈现这些数据。其中一个视图是图形,另一个是条目列表。条目列表很简单。只需将集合绑定到模型:

代码语言:javascript
复制
vm.entries = $scope.meteorCollection(MyData, false);

在视图中,我会这样做:

代码语言:javascript
复制
<div ng-repeat="entry in vm.entries">{{entry.startDate}} - ...</div>

但现在来看图表。我希望将每个元素转换为{ x, y }对象,并提供视图,例如:

代码语言:javascript
复制
vm.graphPoints = transformData(getDataHere());

问题是这里没有获取数据,在angular-meteor中,它看起来像是在视图中调用entry in vm.entries时获取的。关键之处在于,transformData方法需要遍历数据,并将每个项目的索引循环到其他项目中,以计算结果x,y。因此,我不能使用简单的forEach循环(不能以某种方式访问其他项目)。

问题

那么,如何才能在获取控制器中的数据的同时,对添加到数据库中的新数据进行单向绑定(观察)呢?

谢谢

更新

下面的代码可以工作,但我认为每次发生更改时,获取整个集合可能会出现性能问题。

代码语言:javascript
复制
$scope.$meteorSubscribe("myData").then(function() {
    $scope.$meteorAutorun(function() {
        var rawData = MyData.find().fetch();
        vm.model.myData = transformData(rawData);
    });
});
EN

回答 2

Stack Overflow用户

发布于 2015-06-10 18:07:24

编辑:

这是当前的解决方案:

代码语言:javascript
复制
$scope.collectionData = $scope.meteorCollection(MyData, false);
$meteor.autorun($scope, function() {
        vm.graphPoints = transformData($scope.collectionData.fetch());
    });

有一些缺失的信息。你不想在客户端有某种模型对象吗?如果这是正确的,我认为你必须这样做:

代码语言:javascript
复制
$meteor.autorun($scope, function() {
        vm.graphPoints = transformData($scope.meteorCollection(MyData, false));
    });
票数 1
EN

Stack Overflow用户

发布于 2015-06-15 09:04:17

使用Collection Helper Meteor包添加函数https://github.com/dburles/meteor-collection-helpers/如何?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30730003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档