【问题标题】:Backbone.js + Relational + AMD ... bootstrapping relationalsBackbone.js + Relational + AMD ...引导关系
【发布时间】:2011-12-09 09:56:14
【问题描述】:

我感到有点失落并忽略了一些东西,但我不知道如何解决这个问题,甚至不太确定如何问......

首先,我使用的是 AMD 方法(使用 curl.js 库),这可能会使这变得更加困难,但我不会因为这个问题而放弃 AMD。

我有这种来自服务器的引导数据结构,存储在“window.bootstrap”属性中。

Departments = [
  {"Id": 1, "Name": "Early Collections" },
  {"Id": 2, "Name": "Collections" }
]
Blocks = [
  {"Id": 1, "Code": "K", "Department": 1 },
  {"Id": 2, "Code": "A", "Department": 2 }
]

现在我对解决此问题的方法感到困惑。这是我的“DataModel/Block”模块:

define [
    'Collection/DepartmentCollection'
    'DataModel/Department'
], (DepartmentCollection, Department) ->

    Backbone.RelationalModel.extend
        relations: [
            type: Backbone.HasOne
            key: 'Department'
            relatedModel: Department
            collectionType: DepartmentCollection
        ]

Module 'DataModel/Department' 只是没有任何关系的普通 RelationalModel。此外,这里提到的每个 Collection 也很简单,除了像这样引用 Model 之外没有任何其他内容:

define ['DataModel/Department'] , (Department) ->
    Backbone.Collection.extend
        model: Department

最后,这是 Bootstrap 模块,如下所示:

define [
    'DataModel/Department'
    'Collection/DepartmentCollection'
    'DataModel/Block'
    'Collection/BlockCollection'
] , (Department, DepartmentCollection, Block, BlockCollection) ->

    model = Backbone.RelationalModel.extend
        relations: [
            type: Backbone.HasMany
            key: 'Departments'
            relatedModel: Department
            collectionType: DepartmentCollection
        ,
            type: Backbone.HasMany
            key: 'Blocks'
            relatedModel: Block
            collectionType: BlockCollection
        ]

    data = window.bootstrap || {}

    boot = new model
    boot.get('Departments').reset data.Departments || []
    boot.get('Blocks').reset data.Blocks || []

    return boot

我希望它会为这些块找到部门并在那里分配模型,但调用

console.debug ins.get('Blocks').at(0).get('Department')

...让我不确定。

但这不是结束。我也将拥有与部门相关的服务器中的其他实体。我想看看,它会自动从该引导程序附加部门,所以我可以透明地使用它。

我不知道我是否误解了这个关系库,或者它还没有准备好 AMD。任何帮助表示赞赏。

【问题讨论】:

  • 我真的不知道您所说的“AMD 就绪”是什么意思?所以很有可能骨干关系不是。我认为这与您的处理器品牌无关;)。
  • 继续阅读CommonJS proposal。无论如何,看起来你已经准备好了 AMD,这只是我的错误。很抱歉打扰您:) 感谢您提供这个很棒的图书馆。节省大量工作。

标签: javascript backbone.js commonjs backbone-relational


【解决方案1】:

看起来解决了。问题出在一行代码中...

Backbone.Model.prototype.idAttribute = "Id"

我忘记了我正在为对象属性使用 PascalCase 标识符。目前一切正常。

【讨论】:

    【解决方案2】:

    潜在的范围界定/名称解析问题? console.debug(window.Block, window.Department) 得到什么输出?如果您确实获得了模型类型,则将relatedModel 作为字符串提供可能会有所帮助,例如relatedModel: "Department".

    【讨论】:

    • 好吧,当没有像“Department”这样的对象不在全局上下文中时,我怎么能将字符串用于相关模型?这就是 AMD 的目的,而不是将全局上下文与仅用于某些应用程序部分的对象混淆。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-02
    • 2014-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-26
    相关资源
    最近更新 更多