2012-04-13 2 views
0

처음으로 require.js를 시도하기로 결정했습니다. 대부분의 경우 템플릿로드를 동적으로 처리하려고 할 때까지 제대로 작동합니다.requirejs 비동기식 템플릿 모듈 패턴로드

기본적으로 템플릿을 모두로드하고 사용할 수있을 때까지 앱을 진행해서는 안된다는 요구 사항이 있습니다.

그 결과로 모듈 'templating'이 생성되었습니다. 반환하기 전에로드해야하는 템플릿 배열 (이미 사용 가능)의 정의를 가져옵니다.

저는 이것이 아마 안티 패턴 일 것이라고 확신합니다. 어떻게 수정하겠습니까?

app -> requires "templating" 
    define templating -> 
     - loop through an array of templates and dynamically create a list 
     - define all templates (via text!) so later we can require("template-name") 
     - also tried, require all templates 

내가 관찰 한 것은 모든 템플릿이로드되기 전에 템플릿 모듈이로드되어 앱에서 사용할 수있게되었습니다.

나중에 템플릿을 가져 오는 XHR은 다음과 같습니다.

모든 텍스트를로드하고 컴파일하기 전에 모듈이 반환되지 않도록하려면 어떻게해야합니까? 의사 코드 또는 예제에 대한 링크가 좋을 것입니다.

답변

1

우리는 실제로 프로젝트 초기에 하나의 솔루션을 가지고 다른 솔루션으로 옮겼습니다.

[1] 동기화 - 우리가 우리의 응용 프로그램에서 jQuery를 사용하기 때문에 우리는 응용 프로그램 전체에서 사용할 수있는 jQuery Deferred 객체를 사용할 수 있습니다. 나는 모든 템플릿이로드되었을 때만 호출되는 .resolved()가있는 Deferred 인스턴스를 만들었습니다. 그럼 난 내가 가진 템플릿을 사용하려고 할 때마다 그것과 같은 코드에 싸여 :

$.when(cache.templatesLoadedPromise).done(
    function() { 
    // Render the view. 
    $("...").html($.tmpl(cache.template, jsonData)); 
    }); 

은 그 다음의 어느 것도 템플릿을 사용할 때까지 일어날 렌더링하지 않습니다.

[2] 모듈 당 로딩 및 등록 - 아무도 솔루션 [1]에 미치지 못했고 각 모듈이 특정 모듈에 필요한 템플릿 만로드하려고했습니다. 그래서 우리는 그것들을 "text! something.tmpl"요구 사항으로 나열한 다음 필요 조건으로 모듈 내의 첫 번째 라인으로 특정 템플릿의 등록을 수행하기 시작했습니다. 여기에서는 ICanHandlebarz와 함께 템플릿 엔진으로 Handlebars를 사용합니다 (Mustache의 ICanHaz와 비슷 함). 그래서 나는 ich.addTemplate ("something", something)에 대한 호출을 가지고 있습니다. 모듈 코드 시작 부분에

경우에 따라 여러 모듈이 동일한 템플릿을 사용하므로 등록을하기 전에 템플릿이 이미 등록되었는지 확인해야했습니다.

그 중 하나가 문제를 해결하는 데 도움이 되었기를 바랍니다.

+0

건배. 내 모든 템플릿은 뷰와 관련이 있으며 뷰/모델 끝에서 실제로 템플릿을 오프로드 할 수 있습니다 ... 어쨌든 아직 결정되지 않았습니다. –

관련 문제