js 프로젝트에서 백본, requirejs 및 핸들 바를 사용하여 일종의 템플릿 로더 클래스를 만들려고합니다. 상기,RequireJs exporting Handlebars templates
[...]
addTemplate : function (path,name)
{
//_templates is an array defined outside
_templates[name] = require([path],function(tpl){
result = Handlebars.compile(tpl); //this is a Handlebar compiled template
return result;
});
console.log(_templates[name]); // returns the js code of the require function (i think)
},
[...other stuff...]
너무 :
목적은 내가이이 동적으로 클래스 내부
something.addTemplate('text!path/to/template','templateName');
처럼 핸들의 응용 프로그램에서 템플릿 및 설정 파일에서 하지를로드하는 것입니다 addTemplate 함수의 끝 _templats [이름] 않습니다 컴파일 된 템플릿을 포함 ...
나를 도와 줄 수 있습니까?
편집
내가 자세한 내용과 질문을 업데이트 채팅에 몇 가지 제안을 점점 후 :
내가 달성하기 위해 노력하고있어, 한 번만 그들이 처음 핸들 템플릿을 컴파일하는 것입니다 라는.
내가 할 수있는 일은 코드 어딘가에있을 수 있다는 것입니다. templatemanager.addTemplate ('path', 'name'); // requirejs를 사용하여 파일을로드하고 핸들 바를 사용하여 파일을 컴파일 한 다음 템플릿 관리자에 저장합니다
과 같은 작업을 수행 할 수 있도록 다른 곳에서 가능합니다. templatemanager.getTemplate ('name');
컴파일 된 핸들 모음 템플릿을 반환합니다.
나는 requirejs의 비동기 특성으로 인해 addtemplate과 지연된 객체와 약속을 사용하는 getTemplate 모두에서 "무언가"해야한다고 생각합니다.
그게 뭔가?
EDIT 2
제가 부분적 기능 리팩토링 해결. 나는 다른 사람이 같은 문제를 겪고 있다면 여기에 적는다.
addTemplate : function (path,name)
{
var deferred = $.Deferred();
require([path],function(tpl){
_templates[name] = Handlebars.compile(tpl);
deferred.resolve(_templates[name]);
});
return deferred.promise();
}
더 자세히 설명해 주시겠습니까? jquery Deferred/약속 (예 :)을 내 코드와 "병합"하는 방법을 이해할 수 없습니다. 또한 requirejs가로드를 완료하면 두 번째 매개 변수로 전달 된 함수가 실행됩니다. 하지만 그 함수 내부에 _templates 변수를 전달할 수 없습니다. – Stormsson
@Stormsson이 예제와 함께 대답을 업데이트했습니다. –
@Stormsson이 콜백을 호출 한 사람이 아니기 때문에 콜백 함수가 필요하도록 자신의 매개 변수를 전달할 수 없습니다. 이 콜백을 호출하고 모든 매개 변수를 전달하는 것은 RqeuireJs입니다. –