2012-03-29 3 views
1

나는 Backbone 내부에서 Deferreds를 사용하기 위해 Sam Breed에서 읽은 기술을 사용하고 있습니다. 내 백본 내 initialize 방법 내부jQuery Deferreds와 함께 BackboneJs 사용하기

View 나는 다음과 같은 한 :

var me = this; 

this.deferredTemplate = $.ajax({ 
    url: 'details/welcomeMaster.htm' 
}).done(function (data) { 
    me.template = data; 
}); 

이는 내 View 외부에 위치하는 저를위한 템플릿 파일을로드합니다.

다음은 내가 필요로 할 때 새로운 코드입니다.

var something = new Dashboard.Views.WelcomeMasterView({ 
     collection: me.collection, 
     el: $('.contentContainer') 
}); 

something.deferredTemplate.done(function (data) { 
     something.render(); 
}); 

불행하게도 나는 something 내 백본 View 아닌 jqXHR 객체가되도록 그 2 문을 중단해야합니다. 이 코드는 잘 작동합니다.

질문 위의 두 통화를 함께 연결하는 방법에 대한 아이디어가 있으십니까? .done() 메서드 내에서 백본 View 개체가 필요합니다.

답변

4

간단하게 유지하려면 먼저 템플릿을로드 한 다음 가져온 모든보기를 구성하는 것이 좋습니다. 이것은 같은 일을 제공하는 AMD 로더가 어떻게 작동 하는지를 말해줍니다.

render: function() { 
    this.deferredTemplate.done(this._render); 
    return this; 
}, 

이를 :

그렇지 않으면, 하나의 생각이 그런 말을

_render: function() { 
    this.$el.html(this.template(this.model.toJSON())); 
}, 

당신의 render 일반적으로 무엇을 할 것 _render을 추가하는 것입니다 준비가되면, 일반 render_render를 부를 것이다 물건을 간단하게 유지하고 항상 같은 방법으로 render()에 전화 할 수 있습니다. 하지만 단점에 유의하십시오. 렌더링 호출 후 실제로 렌더링 한 경우 (예를 들어 $el을 다른 곳에서 조작하는 경우) 실제로 요소가 없을 수 있습니다.

지연 기능은 백본에 가장 적합하지만 링크 된 블로그 게시물에서의 사용은 불필요합니다. change에 대한 간단한 바인딩은 동일한 작업을보다 깔끔하게 수행 할 수 있습니다.

+2

내가 유용하다고 쓴 기사도 있습니다. http://lostechies.com/derickbailey/2012/02/09/asynchronously-load-html-templates-for-backbone-views/ 및 http : // lostechies.com/derickbailey/2012/03/20/trafficcop-a-jquery-plugin-to-limit-ajax-requests-for-a-resource/ –

+0

@DerickBailey 당신은 stackoverflow에 대한 모든 백본 질문에 대한 기사를 작성한 것 같습니다 ;) 나는 당신의 블로그를 통과해야합니다! – ggozad

+4

내 기사 아이디어의 절반이 어디에서 왔다고 생각하십니까? "... 다섯 번째로이 질문을 보았습니다. 기사를 써야합니다." : D –

관련 문제