저는 현재 약속에 어려움을 겪고 있으며 개념이 조금 잘못되었다고 생각합니다. 기본적으로 내가하려는 것은 작은 템플릿 핸들러를 작성하는 것입니다.다른 방법으로 약속을 기다리는 중
템플릿을로드하여 속성에 저장하고 chainable이 될 load() 메서드가 있습니다. 내가 연결하고자하는 메소드는 attachTo()
이며 이전에로드 한 템플릿을 DOM 요소에 추가합니다.
템플릿이 비동기 적으로로드되기 때문에 약속을 사용하려고했습니다. 그러나 약속에 대한 done()
메서드가 즉시 시작되고 비동기 호출이 완료되기 전에 발생합니다.
나는 그런 식으로 전화 :
tpl.load('stuff.html').attachTo($('.someElement'));
나는 그것이 내가 attachTo()
를 호출 할 때마다, 그것은 비동기 물건을 끝낼 얻을 내 이전이라고 load() 메서드 기다리는 것을 행동 할 무엇, done
메서드에서 제공된 콜백을 시작합니다.
여기 그것이 범위 지정 문제라고 밝혀졌다
var tpl = {
...
template: null,
promise: null,
load: function(template) {
this.promise = $.get(this.templateUrl + template, function(response){
this.template = response;
console.log(this.template);
//Outputs the desired value
});
return this;
},
attachTo: function(el) {
var self = this;
$.when(this.promise).done(function(){
//outputs null but should output the
//value that has been set in my async call
console.log(self.template);
});
}
..
}
tpl.load('stuff.html').attachTo($('.someElement'));
, 어쩌면 당신이 (결과에 관계없이 유형의 호출 완료) 오류를 받고 있습니다. 나쁜 요청으로부터 좋은 요청 결과를 구별하기 위해 this.promise.then(). fail() 접근 방식을 시도해보십시오. –
감사합니다. @PeterAronZentai. 정말로 내 실수 였어. 템플릿 속성을 설정하면 범위가 엉망이됩니다. 이것은 더 이상 내 객체를 참조하지 않고 대신 콜백의 범위를 참조합니다. 그냥 프록시를 사용해야했습니다. 그 문제를 지적 해 주셔서 감사합니다! – thpl
나는 당신의 코드에 어떤 문제가 있는지 모르겠다. –