在Sails.JS / Waterline中汇总嵌套的模型数据

我正在努力把我的业务逻辑放在我的SailsJS项目中。

我的数据模型如下:

Portfolio (hasMany) -> Positions (hasOne) -> Asset-> (hasMany) Ticks 

我正在寻找聚合数据的孩子使用父级模型上的计算属性级联一路到组合。 eG an Asset知道最新的报价(价格),仓位知道其当前价格(其数量最less的股票数量),等等。理想情况下,我想将这些数据添加到JSON中,以便将业务逻辑从Ember客户端移开。

这工作正常的一个级别,但如果我尝试使用一个孩子的计算属性,它是要么未定义或使用toJSON()空

Asset.js:

 latestTick: function () { if (this.ticks.length> 0) { this.ticks.sort(function(a, b){ var dateA=new Date(a.date), dateB=new Date(b.date) return dateB-dateA }) return this.ticks[Object.keys(this.ticks)[0]].price; } return 0; }, toJSON: function() { var obj = this.toObject(); if (typeof this.latestTick === 'function') obj.latestTick = this.latestTick(); return obj; } 

这工作(添加typeof检查之后取决于它是否返回嵌套或没有工作)。

现在在Position.js中

  assetID:{ model: "Asset", }, 

我想计算currentValue:

  currentValue: function () { return this.assetID.latestTick() * this.numberShares; }, 

这不起作用,因为该function不可用(只有硬编码的属性)。 我尝试使用Tick.Find()…但遇到asynchronous问题(JSON是在数据被提取之前返回)。

我试图强制在JSON中embedded/填充关联,但没有任何区别。 一旦我跨越了一个以上的层次,我就不会得到任何数据。

我应该在哪里做聚合? 我不想使用自定义控制器操作,但利用REST API。