2012-09-21 2 views
8

knockout.js를 inbuilt 템플릿 시스템과 함께 사용하고 있습니다. 템플릿을 다음과 같이 정의합니다.knockout.js 런타임에 템플릿로드

<script type="text/html" id="subjectItemView"> 
    <span class="name" data-bind="text: subjectName" /> 
</script> 

그런 다음 템플릿의 ID를 사용하여 스크립트의 일부로 사용하는 것이 필요합니다.

단일 페이지 응용 프로그램에 이러한 템플릿이 적고 최근에 require.js를 사용하여 필요할 때만 필요한 스크립트를로드하는 방법으로 이동했습니다. 내 모듈이 종속 파일로 템플릿을 나열 할 수 있도록 require.js를 사용하여 템플릿과 동일한 작업을 수행하고 싶습니다.

어떻게하면됩니까?

답변

10

나는 require.js 텍스트 플러그인 : http://requirejs.org/docs/api.html#text을 사용합니다. 템플릿 텍스트를 얻은 다음 새 스크립트 태그 (text/html 또는 자바 스크립트가 아닌 다른 유형의 태그)로 페이지에 추가 할 수 있습니다.

실제로 문자열을 직접 처리하는 수정 된 템플릿 엔진을 사용하여 추가 스크립트 태그를 페이지에 추가 할 필요가 없습니다.

this.activate = function() { 
     //load view model from the server 
     if (!this.loaded) { 
      require(["modules/" + name, "text!../templates/" + self.template + ".html"], function(Module, template) { 
       ko.templates[self.template] = template; 
       self.data(typeof Module === "function" ? new Module() : Module); 
       self.loaded = true; 
      }); 
     } 
    }; 

내가 좋아하는 외모 사용하는 stringTemplateEngine : 잘 작동 https://github.com/rniemeyer/SamplePresentation/blob/master/js/stringTemplateEngine.js

+1

감사 라이언,

내 코드가 같이 보입니다. 그 stringTemplateEngine은 훌륭합니다! 요구 모듈에 프로세스를 래핑하여 어디서나 동일한 상용구 코드가 없도록했습니다. https://github.com/aranm/ko.loadTemplateUsingRequireText. –

+0

이 접근법을 koExternalTemplateEngine (https://github.com/ifandelse/Knockout.js-External-Template-Engine)과 함께 사용할 수 있습니까? 또는 여러 개의 사용자 지정 템플릿 원본을 가질 수 없습니까? – daedalus28

+0

최종 결과를 원하는대로 명확히 할 수 있습니까? 외부 템플릿 엔진에서 템플릿 검색을 처리하지만 스크립트로 추가하지 않겠습니까? –