2013-04-12 3 views
7

또 다른 오랜 연구 끝에 sth가 나온다 :-) 문제는 "getObjectByName"함수에 관한 것 같다. requireJS (ADM)에서는 제대로 작동하지 않습니다. 현재, 문제를 해결하기 위해 globel var을 설정해야합니다. 더 나은 해결책이 있어야한다고 확신합니다.RequireJS를 사용하여 백본 관계형 (0.8.5) 작업을 수행하는 방법은 무엇입니까?

var APP = {}; 

define(['backbone-relational'], function(){ 
    Backbone.Relational.store.addModelScope(APP); 
}) 

(2)에 관계 모델을 수출

(1) 설치 글로벌 VAR 및 설치 글로벌 ("APP")로 검색 모델 범위 : 여기

내 임시 soluton입니다 세계

APP.YourRelationalModel = YourRelationModel; 

잘 작동하지 않지만 ... 나는 더 나은 대답을 고대합니다. 감사.

// ------------

테스트 버전 :

1.Backbone-Relational 0.8.5 
2.Backbone 1.0.0 and Underscore 1.4.4 
3.JQuery 1.8.3 
4.RequireJS 2.1.5 

코드는 매우 간단하다 (또는 https://github.com/bighammer/test_relational_amd.git 참조)

require.config({ 

paths : { 

    js     : 'js', 
    jquery    : 'js/jquery-1.8.3', 
    underscore   : 'js/underscore', 
    backbone    : 'js/backbone', 
    'backbone-relational' : 'js/backbone-relational' 
}, 

shim : { 
    underscore : { 
     exports : '_' 
    }, 
    backbone : { 
     deps : ['underscore', 'jquery'], 
     exports : 'Backbone' 
    }, 

    'backbone-relational' : { 
     deps: ['backbone'] 
    } 
} 

});

define(['backbone', 'backbone-relational'], function (Backbone) { 

var Child = Backbone.RelationalModel.extend(); 
var Parent = Backbone.RelationalModel.extend({ 
    relations : [ 
     { 
      key   : 'child', 
      type   : Backbone.HasOne, 
      relatedModel : 'Child' 
     } 
    ] 

}); 

var test = new Parent(); 

}); main.js에서 위의 코드 저장

다음과 같이 index.html을 포함 : 그것은 작동하지 않습니다

.

Relation=child: missing model, key or relatedModel (function(){ return parent.apply(this, arguments); }, "child", undefined). 

나는 backbone-relational의 소스 코드를 읽고 네임 스페이스에 문제가 있음을 알고 있습니다. Relational-Backbone은 "Parent"에 정의 된 relatedModel을 찾을 수 없습니다 (releatedMode : "Child"를 찾을 수 없음). 내 제한된 지식으로 인해이 문제를 해결할 해결책을 찾지 못했습니다 :-)

아무도 도와 줄 수 있습니까? 내 질문을하기 전에

, 나는 다음과 같은 솔루션을 연구 : 그들의

Backbone.RelationalModel using requireJs
Can't get Backbone-relational to work with AMD (RequireJS)
Loading Backbone.Relational using Use! plugin

없음이 경우에서 일하지 않는다.

+1

또 다른 오랜 연구 끝에 sth가 나옵니다 .- 문제는 "getObjectByName"함수에 관한 것 같습니다. requireJS (ADM)에서는 제대로 작동하지 않습니다. 현재, 문제를 해결하기 위해 globel var을 설정해야합니다. 더 나은 해결책이 있어야한다고 확신합니다. 여기 내 임시 솔루션 : (1) 전역 변수를 설정하고 검색 모델 범위를 전역 변수 ("APP")로 설정하십시오. var APP = {}; 정의 ([ '백본 관계형', 함수() { Backbone.Relational.store.addModelScope (APP) }) (2) – bighammer

답변

15

relatedModel을 문자열로 참조 할 필요가 없으므로 직접 참조 할 수 있으므로 relatedModel: 'Child' 대신 relatedModel: Child을 사용하십시오.

requireJS를 사용하고 있으므로 다른 파일에서 쉽게 모델을 참조 할 수 있습니다.

define(['backbone', 'models/child', 'backbone-relational'], function (Backbone, Child) { 
    var Parent = Backbone.RelationalModel.extend({ 
    relations : [{ 
     key   : 'child', 
     type   : Backbone.HasOne, 
     relatedModel : Child 
    }] 
    }); 

    var test = new Parent(); 
}); 
+0

고마워요. 그것은 작동합니다. 사실, 나는 Reference를 한 번 사용하려고 시도했지만 작동하지 않았다. 이제 왜 그 시간에 작동하지 않았는 지 알아보십시오. 그것은 프로젝트 소스 코드에서 내 다른 실수로 인해 발생합니다 : ( – bighammer

0

위의 해결책은 제게 적용되지 않았습니다. 나는 Racks Asset Pipeline (RequireJS/AMD/CommonJS/anything이 아님)을 Webpack으로 점진적으로 옮겨 가고 있습니다.나는 레일 자산 파이프 라인에 여전히 있었다 내 모델과 관계를 정의하여 웹팩 번들 준비에 backbone-relational을 필요로 이동할 때, 나는 에서 내 경우를 설명 할 수없는 Relation=child: missing model, key or relatedModel (function(){ return parent.apply(this, arguments); }, "child", undefined).

을 많이 받기 시작,이 솔루션은 복용에도 불구하고, 매우 간단 었죠 오랜 시간이 내 인생에 발견 할 : 기본적으로

// In a Webpack module, later included into Rails Asset Pipeline 
// temporarily to facilitate migration 

require('expose?Backbone!backbone') // Exposing just for migration 
require('backbone-relational') 
Backbone.Relational.store.addModelScope(window) 

backbone-relational 문자열 기반 relatedModel의 해결을 위해 글로벌 범위를 사용하지만 그것이 실제 전역 범위없이 필요한 된 이후,이 솔루션은 되었 단순히사용하여 addModelScope 그래서 그것은 지정된 모델에 대한 해당 범위를 검색 할 수 있습니다.