2012-01-25 9 views
4

나는 카테고리 트리보기를 RequireJS 및 백본 응용 프로그램으로 다시 작성하고 있습니다.백본, RequireJS 및 트리

구조는 간단합니다. 각 카테고리에는 하위 카테고리 모음이 있습니다.

그러나 순환 종속성 문제는 신속하게 나타납니다. 카테고리 모델에는 카테고리 콜렉션이 필요하며 카테고리 콜렉션에는 카테고리 모델이 필요합니다.

은 RequireJS 워드 프로세서에서 순환 종속성에 대한 빠른 선전이되어

http://requirejs.org/docs/api.html#circular

하지만, 난 아직도 undefineds 및/또는 오류를 받고 있어요 때문에 내가 뭔가를 누락 것으로 보인다. 나는 예제에서 'a'가 아니라 'b'만 보는 것이 나를 이해하지 못하게하는 것이라고 생각한다.

누구든지 명확하게 설명 할 수있는 간단한 예를 제공 할 수 있습니까? 이것, 또는 이것을 구조화하는 더 좋은 방법은 순환 종속성을 필요로하지 않을 것입니다.

+0

순환 의존성을 위해 무엇을해야합니까? require.js 문서에 쓰여 있듯이 : "순환 종속성은 드문 경우가 많으며 일반적으로 설계를 다시 생각해 볼 수있는 신호입니다." – SunnyRed

+0

예, 사실입니다. 그러나 위의 구조를 설명했습니다. 재귀 적/순환 적 종속성이 아닌 트리 구조를 제공 할 수 있다면 해당 예제를 제공하십시오. –

+0

Sry, 첫눈에 제대로 디자인을 이해하지 못했습니다. 그래서) a)는 sth를 사용하고 있습니다. 질문과 같은 카테고리 및 하위 카테고리? b) 다음을 보았습니까? http://stackoverflow.com/questions/6150378/backbone-with-a-tree-view-widget & http://stackoverflow.com/questions/6026752/backbone-collections-representing- 트리 데이터. c) 문제를 명확하게하기 위해 현재 코드를 추가하면 도움이 될 수 있다고 생각합니다. – SunnyRed

답변

2

순환 참조 때문에 require.js가 "a"의 전제 조건으로 "b"를로드 할 때 a가 initModule()이 아직 호출되지 않았으므로 "a"값을 반환 할 수 없습니다. 그러나 b.somethingElse()이 호출 될 때까지 모듈 "a"가 초기화되고 require("a") 호출이 반환됩니다.

다음 코드는 두 모듈 내부에 무엇이 있는지 보여줍니다.로드 된 순서는 중요하지 않습니다. require.js 예제에서 조금 더 명확하게 변경했습니다. 일반 순환 참조에 나쁜 디자인의 증상 동안

// Inside a.js: 
define(["require", "b"], 
    function initModule(require) { 
     return { 
      doSomehingWithA: function() { ...}, 
      doSomethingElse: function(title) { 
       // by the time this function is called, 
       // require("b") will properly resolve 
       return require("b").doSomethingWithB(); 
      } 
     } 
    } 
); 

// Inside b.js: 
define(["require", "a"], 
    function initModule(require) { 
     return { 
      doSomethingWithB: function() {...}, 
      doSomethingElse: function(title) { 
       // by the time this function is called, 
       // require("a") will properly resolve 
       return require("a").doSomethingWithA(); 
      } 
     }; 
    } 
); 

BTW, 그것은 항상 아니에요. 예를 들어, 위젯 팩토리 모듈을 구현했습니다.이 모듈은 내용을 생성하기 위해 팩토리를 참조해야하는 "컨테이너 위젯"모듈을 참조했습니다. 완벽하게 합법적이다.