【问题标题】:how to model this relationship in Spine.js如何在 Spine.js 中建模这种关系
【发布时间】:2012-05-30 18:36:09
【问题描述】:

在我的应用程序中,我需要对与文件系统非常相似的对象之间的关系进行建模。

我有ImageVideoCollection

集合可以包含所有三种类型的对象。 虽然图像和视频可以是多个集合的一部分,但集合只能包含在一 (1) 个集合中。

在脊柱中模拟这种关系的最佳方法是什么?

我想做的是从一个通用模型定义中创建所有子类,比如说 Asset 所以一切都是资产,我可以在该模型上实现类和实例方法,并且所有子类模型定义都继承这些方法。

我使用这种方法遇到的问题是我需要/希望将关系放在资产上,所以

类资产扩展了 Spine.Model
    @configure '资产'、'标题'、'描述'

    @belongsTo '收藏',收藏

除了我不确定如果我有Colletion 子类Asset 并且asset 设置了对Collection 的引用时这是否真的有效... 这里的问题是,belongsTo 是一种单向关系,我只需要 Collections 所以正确的方法是拥有一个@hasMany 'collections', Collection 并确保没有集合为此属性设置多个对象

另一个问题是:我可以使用 Asset.find(id) 来获取属于 Asset 子类的所有对象吗?

【问题讨论】:

    标签: javascript model-view-controller spine.js


    【解决方案1】:

    我不确定您的问题是什么,除了尝试您的上述结构是否有效。

    您所描述的称为“复合设计模式”(http://en.wikipedia.org/wiki/Composite_pattern),其中 Collection 是“复合”,ImageVideo 都是“叶子”

    关于您的@hasMany 问题,除了您已经定义的Asset 代码之外,您是否不希望在Collection 子类上使用以下而不是@hasMany 'collections', Collection

    @hasMany 'assets', Asset

    鉴于您可以在树上上下遍历。

    再次,我真的不确定这种递归遍历是否在 Spine 中有效(从未尝试过,尽管我广泛使用 Spine)

    hth 一些, 吉尔特-扬

    【讨论】:

    • 是的,复合模式是我试图实现的。我在子类化/扩展资产模型(Spine.Model)时遇到了问题,因为它并没有通过简单的子类化来带来所有属性......我必须在模型定义中做一个@extend Asset。我遇到的另一个问题是我试图将关系(belongsTo 或 hasMany)放在资产上的 Collection 中,在这里我遇到了另一个我无法弄清楚的错误(可能是因为 Collection 是资产的子类,但我没有知道。
    • 不确定您对@hasMany 'assets', Asset 的建议是什么,您的意思是我应该为资产和集合实现hasMany?
    • 很好地构建复合模式(同样,如果这个递归的东西在 Spine 中工作,你必须自己检查一下)你会有:1)@belongsTo 'collection', 'Collection'Asset 和 2)@ 987654335@ Collection 。这些定义应该放在一起,因为它们构成了AssetCollection 之间双向关系的两个方面。这使得Collection 可以拥有许多Assets,其中ImageVideo 还有Collection,它允许任意深度嵌套的集合,例如:col1 > colb > colc > videoA
    • 好的。问题还在于,视频和图像可能是部分或多个集合,而不仅仅是一个集合,但那不是问题 atm。不知道该怎么做。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2017-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多