2011-10-17 2 views
1

나는 종류의 잃어버린 무언가를 바라 보는 느낌,하지만 난 이것에 접근조차하지 매우 확실 요청하는 방법을 ...Backbone.js + 관계형 + AMD ... 부트 스트랩 관계식

하는 방법을 잘 모르겠습니다 우선, 나는이 방법을 어렵게 만드는 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 } 
] 

이제이 접근 방법에 대해 혼란스러워합니다.

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

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

모듈 'DataModel이/부서'어떤 관계없이 그냥 일반 RelationalModel한다 : 여기 내 'DataModel이/벽돌'모듈이다. 또한 여기에 모든 언급 컬렉션이 같은 모델도 참조하지만 아무것도없는 보통이다 :

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

그리고 마지막으로, 여기에 다음과 같습니다 부트 스트랩 모듈, 간다 :이 기대하는

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가 준비하지 않았는지 알 수 없습니다. 어떤 도움을 주셔서 감사합니다.

+0

"AMD는 준비가 되셨습니까?"라는 말의 실마리가 없습니다. 따라서 백본 관계형은 그렇지 않을 수도 있습니다. 나는 그것이 당신의 프로세서 브랜드와는 아무 상관이 없다고 가정합니다;). – Paul

+0

[CommonJS proposal] (http://wiki.commonjs.org/wiki/Modules/AsynchronousDefinition)에서 읽으십시오. 어쨌든, AMD의 준비가되어있는 것처럼 보입니다. 단지 제 실수였습니다. 너를 괴롭히는 것에 대해 미안하다 :) 그리고 너의이 위대한 도서관에 감사드립니다. 많은 작업을 저장합니다. – FredyC

답변

0

해결되었습니다. 문제가 한 줄의 코드에서 발생했습니다 ...

Backbone.Model.prototype.idAttribute = "Id" 

개체 속성에 PascalCase 식별자를 사용하고 있습니다. 모든 것이 이제는 괜찮아 보입니다.

0

잠재적 인 범위 지정/이름 확인 문제가 있습니까? console.debug(window.Block, window.Department)에 대한 출력은 얼마입니까? 모델 유형을 얻은 경우 relatedModel을 문자열로 제공하는 것이 좋습니다. relatedModel: "Department".

+0

글쎄, "Department"와 같은 객체가 전역 컨텍스트에없는 경우 relatedModel에 string을 어떻게 사용할 수 있습니까? 이것이 AMD의 목적이며, 애플리케이션의 일부 분야에만 목적이있는 객체로 글로벌 컨텍스트를 혼란시키지 않습니다. – FredyC