在 Meteor 中,当您从数据库中检索记录时,它只是一条记录。因此,如果我有一个名为 的集合Dogs
, adog
可能有fur: 'brown'
or breath: 'stinky'
,但它没有bark()
方法。
显然,我可以创建一些期望 adog
作为参数的函数,然后对它执行操作dog
。我什至可以将所有这些函数封装到一个构造函数中。我对这种方法并不疯狂,但如果有人有一种干净而明智的方法来做到这一点,我会全力以赴。
我的另一个想法是dog
将Backbone.Model
. 这可能很有趣,因为fetch
andsave
可以被重新定义为做find
and insert
or update
,你也可以在那里定义你的所有行为,但我读过这种类型的事情通常是不鼓励的。
有正确的方法吗?有没有Meteor.Model
正式的作品?其他人是如何解决这个问题的?
编辑
对于那些在接受答案一年多后提出这个问题的人:在此编辑时,我正在使用Exygy 的 minimongoid mrt 包,它对接受答案链接的博客文章中提到的haihappen 版本进行了一些改进。
我目前正在为存储库做出贡献,以使结果集更像关系。希望其他人能利用它并愿意贡献有用的功能。
编辑
另一个答案建议transform
在创建集合时使用该属性。虽然我肯定更喜欢我不需要自己构建的东西,但这个功能增加了很多可能性,我希望任何正在为 Meteor 开发 ORM 的团队都能在核心上利用这个.
这是一篇解释如何使用该transform
属性的博客文章。
此外,minimongoid 现在可以作为 Meteor 包使用,我仍在使用它。它支持验证和声明关系。我也为这个包添加了一些功能,所以如果一个板有很多块,board.pieces().create(attributes)
将保留一个新piece
记录attributes
并自动与board
. 在我见过的各种解决方案中,这似乎是最全面的。