Backbone.js + Relational + AMD ... загрузочные реляции - PullRequest
1 голос
/ 17 октября 2011

Я чувствую себя потерянным и что-то упускаю из виду, но я не уверен, как подойти к этому, и даже не очень уверен, как спросить ...

Прежде всего, я использую подход 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
        ]

Модуль ' DataModel / Department ' - это просто RelationalModel без каких-либо связей.Кроме того, каждая упомянутая коллекция здесь также является простой, без ссылки на 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')

... дает мне неопределенность.

Но это не конец.У меня будут другие объекты с сервера, связанные с Департаментом.И я хотел бы видеть, что он автоматически присоединяет Department из этой начальной загрузки, поэтому я могу использовать его прозрачно.

Я не знаю, неправильно ли я понял эту реляционную библиотеку, или она не готова для AMD.Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 19 октября 2011

Похоже, это решено. Проблема была в одной строке кода ...

Backbone.Model.prototype.idAttribute = "Id"

Я забыл, что использую идентификаторы PascalCase для свойств объекта. Пока все выглядит хорошо.

0 голосов
/ 19 октября 2011

Потенциальная проблема определения области / разрешения имен?Какой выход вы получаете для console.debug(window.Block, window.Department)?Если вы получите тип модели, это может помочь дать relatedModel в виде строки, например, relatedModel: "Department".

...