2017-12-04 75 views
0

dojo/request을 사용하여 서버에 다양한 요청을 제출하는 Dojo 클래스가 있습니다.Dojo 요청에서 작동하지 않는 Dojo aspect

해당 요청에 조언 전에 을 추가하려면 dojo/aspect을 사용해야합니다.

docs은 비교적 이해하기 쉬운 것처럼 보입니다.

내 클래스 선언은 다음과 같은 :

'myPackage/MyClass':function(){ 
    define("myPackage/MyClass", [ 
     "dojo/request", 
     // etc. etc. 
     "dojo/aspect" 
    ], function(request, ..., aspect) { 
     return declare("myPackage.MyClass", null, { 
      constructor: function(options){ 
       aspect.before(dojo, "request", 
        function(url, args){ 
         // TODO 
         alert("before advice applied"); 
        } 
       ); 
      }, 
      // various functions that use dojo request 
     }); 
    } 

); 
} 

내 문제가 전 (before) advice가 실행되지 않습니다 것입니다.

나는 그런 this을 대상으로 대신 dojo, 또는 검사 할 때, xhr을 직접 request을 목표로하고에만 표시 기능 등 몇 가지 변종을 시도했습니다.

필자는 절망에 빠진 의사 페이지로 돌아가서 dojo이라는 방법을 사용하여 "xhr" 메서드를 사용하여 우연히 내부적으로 호출 할 수는 없지만 전혀 작동하지 않는지 확인했습니다.

간과 한 점이 있을까요?

전과 조언 this을 대상으로 실행하고 자주 사용하는 기능이되도록 내 코드를 수정 시도

편집.

뭔가 같은 : 앞 문장의 시간 복잡도를 가정, 내가 성가신 해결 방법을 사용하고 request를 호출하는 각 기능에 대한 before 조언을 추가 할 수 있습니다 의미 상자에서 잘 권리를했다 aspect.before(this, "theFrequentlyUsedFunction",

그 기능에서 request 호출은 간단합니다.

필자의 결론은 Dojo request 호출 전에 조언을 적용 할 때 올바른 대상과 함수 이름을 참조하지 않는다는 것입니다. 그러나 이것이 작동하지 않는 이유는 여전히 당황 스럽습니다.

답변

1

"요청"은 "dojo"객체의 속성이 아닙니다. 함수에서 전달 된 인수의 이름입니다. 따라서 모듈의 속성에 관계없이 모든 객체의 모든 속성에 할당 할 수 있습니다. 그래서 당신은 해결책에 가깝습니다. 내 예제를 살펴 보자 :이 솔루션에 대한

define([ 
    "dojo/_base/declare", 
    ..... 
    "dojo/request", 
    "dojo/aspect" 
], function (
    declare, 
    ..... 
    request, 
    aspect 
) { 

    return declare("Test", [...], {    
     request: request, 
     constructor: function() { 
      aspect.before(this, "request", function() { 
       console.log("before advice applied"); 
      }); 
     } 
     ...... 
    }); 
}); 
+0

감사합니다, 그것은 아주 간단하고 (명백한의 종류)와 함께 작동주의 : 당신이, this.request''에 request''에 전화를 리팩토링 할 필요가 조언을 적용하라. – Mena

+0

도와 드리겠습니다. 불행히도 나는'request'가 정의의 팩토리 함수의 범위에서 인수로만 존재할 때까지는 현재 다른 방법으로는 작동하지 않습니다. –