2013-07-24 1 views
0

를 초기화 backbone.js 모델에 의존 $를 만드는 방법은 다음과 backbone.js 응용 프로그램 초기화 과정이있다 : 응용 프로그램이 $ .ajaxSetup를 초기화 다음는 .ajaxSetup 나중에

var app = { 
    init: function(arg) { 
    $.when(app.loadStaticFiles('any_file_to_load_before')) 
    .done(function(args) { 
     app.models.current_user = app.Models.User(); 
    }); 
    // ... 
    // initializing the backbone app and models 
    // ... 
    $.ajaxSetup({ 
     headers: {Authorization: 'Token token=' + app.models.current_user.get('token')} 
    }) 
    }  
} 
$(document).ready(
    function(){ 
    app.init(args); 
    }; 
); 

app.models.current_user.get('token')을 평가하는 슬프게 IS 정의되지 않았습니다.

디자인에 몇 가지 미스가있는 것 같아요. 어떻게 작동하도록 코드를 다시 작성해야합니까?

$.deferred 해상도 전에 $.ajaxSetup()의 주된 문제가 있다고 생각합니다.

답변

0

지연은 응용 프로그램 프로세스의 순서를 제어하기위한 것입니다. 귀하의 질문을 읽고, 귀하의 응용 프로그램의 순서가 될 필요가 있다고 보인다

  1. app.loadStaticFiles('any_file_to_load_before')
  2. app.models.current_user = app.Models.User();
  3. $.ajaxSetup(...)
  4. 는 백본 응용 프로그램 및 모델을 초기화?

    var app = { 
        init: function(arg) { 
        $.when(app.loadStaticFiles('any_file_to_load_before')) 
         .done(function(args) { 
         app.models.current_user = app.Models.User(); 
         }) 
         .done(function() { 
         $.ajaxSetup({ 
          headers: {Authorization: 'Token token=' + app.models.current_user.get('token')} 
         }) 
         }) 
         .done(function() { 
         // ... 
         // initializing the backbone app and models 
         // ... 
         }); 
        } 
    }; 
    

    작은 세부 사항주의해야 할이 done() 콜백 jQuery의 암시 주문과 관련이있다 :

당신은 같이 사용하여이 deferreds를 작성합니다. 이 코드에서는 4 개의 정적 단계 만 수행합니다. 특정 주문이 필요하고 .done() 콜백을 동적으로 추가하는 경우 다른 하나보다 먼저 추가 된 콜백이 확실하지 않을 수 있습니다. 위의 예제는 jQuery가 추가 된 순서대로 .done() 콜백을 실행하기 때문에 작동합니다. 이 가정이 없다면 jQuery의 .then() 함수를 통해 각 완료 단계에서 연기 된 필터를 프록시/필터링해야합니다. 이 방법을 사용하면 각 중간 단계에는 1 개의 콜백 만 완료되고 다음 콜백에는 1을 첨부하고 나머지 콜백에는 1 개의 콜백이 추가됩니다.