2012-10-04 2 views
2

Strophe.archive 플러그인을 사용하지만 Strophe가 쿼리를 보낸 후에 Deferred 개체의 done 함수가 "정의되지 않은"것으로 보입니다. 나는 또한 "심"require.js의에 플러그인을 추가 :백본 및 require.js와 함께 strophe.plugins를 사용하는 방법

 var q = $.Deferred();  
     q = connection.archive.listCollections("[email protected]"); 
     console.log(q); 
     q.done(function(){ 
      console.log("DONE"); 
     }); 

내가 얻을 다음 추적 :

Uncaught TypeError: Cannot call method 'done' of undefined test.js:23 
Backbone.View.extend.initialize test.js:23 
Backbone.View backbone.js:1148 
child backbone.js:1393 
Backbone.Router.extend.pageTest router.js:92 
(anonymous function) backbone.js:900 
(anonymous function) backbone.js:1082 
_.some._.any underscore.js:193 
_.extend.loadUrl backbone.js:1080 
_.extend.navigate backbone.js:1125 
_.extend.navigate backbone.js:909 
Backbone.View.extend.pageTest test1.js:199 
jQuery.event.dispatch require-jquery.js:5385 
elemData.handle.eventHandle 

심 :

archive: { 
     deps: ["jquery", "strophe"], 
     exports: "archive" 
    }, 

답변

1

당신은 호출 지연된 OBJ 및 이를 q에 할당 한 다음 listCollections의 결과를 q에 할당합니다. 이것들은 전혀 다른 2 가지 서로 다른 과제입니다. q을 처음에 연기했기 때문에 listCollections의 결과가 이제는 어떤 의미인지는 알 수 없습니다. deferrable. 당신이 그것에 done를 호출 할 수 있도록하기위한

var q = $.Deferred(); // q is a deferred obj 
    q = connection.archive.listCollections("[email protected]"); // q is undefined 

listCollections이 지연된 객체를 반환해야합니다.

플러그인 코드를 보면 listCollections은 아무 것도 반환하지 않습니다.

대신 listCollections에게 콜백 함수를 통과해야합니다 :

var q = $.Deferred();  
    q = connection.archive.listCollections("[email protected]", null, function(){ 
     console.log("DONE"); 
    }); 

또는 당신이 연기 복귀 것이다 listCollections에 대한 래퍼 함수를 ​​만들 수 있습니다.

q = deferrableListCollections("[email protected]"); 
    q.done(function(){ 
     console.log("DONE"); 
    }); 
+0

대 답 :

function deferrableListCollections() { var q = $.Deferred(); connection.archive.listCollections("[email protected]", null, function(){ q.resolve() ; }); return q; } 

없음 당신은 당신의 원본 코드와 유사 뭔가를 호출 할 수 있습니다! 고마워요! – genericatz

+0

감사합니다. 기꺼이 도와 드리겠습니다. –