【发布时间】:2015-06-03 03:03:31
【问题描述】:
我正在为将业务逻辑放在 SailsJS 项目中的哪个位置而苦苦挣扎。
我的数据模型如下:
Portfolio (hasMany) -> Positions (hasOne) -> Asset-> (hasMany) Ticks
我正在寻找使用父模型上的计算属性聚合子数据,该父模型一直级联到 Portfolio。例如,资产知道最新的报价(价格),头寸知道其当前价格(numberShares * 其资产的最新报价)等。理想情况下,我想将此数据添加到 JSON,以便我可以将业务逻辑从 Ember 客户端移开.
这适用于一个级别,但如果我尝试使用孩子的计算属性,它要么是未定义的,要么是在使用 toJSON() 为空时
资产.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;
},
这不起作用,因为该功能不可用(只有硬编码的属性)。我尝试使用 Tick.Find()... 但遇到了异步问题(在获取数据之前返回 JSON)。
我尝试在 JSON 中强制嵌入/填充关联,但没有任何区别。一旦我跨越多个层次结构级别,我就不会得到任何数据。
我应该/可以在哪里进行这种聚合?我不想使用自定义控制器操作,而是利用 REST API。
【问题讨论】:
标签: javascript node.js sails.js waterline