2014-04-23 7 views
1

저는 durandal에서 오류 처리에 어려움을 겪고 있습니다.Durandal에서 오류가 발생했습니다.

나는 activate 함수에서 뷰 등을 렌더링하는 데 많은 로직을 배치하는 것이 바람직하다는 것을 알았습니다.

몇 가지 프로그래밍 오류로 인해 전체 앱이 매우 조용하게 넘어갈 때까지 제대로 작동했습니다. 즉, 콘솔에 기록 된 내용이 없거나 트랩 된 오류가 없으면 앱이 activate 기능에 멈춰 있습니다.

예상되는 동작입니까? 내 애플 리케이션 로직을 다른 곳으로 옮겨야 하는가?

실제 코드는 조금 어색하고 많은

나는 내가 쓴보고 있었는지 증명하기 위해 JQuery와의 약속 등에 싸여 다음

콘솔에 아무것도 썼다
public activate(stationId: string): void { 
     throw "Error in detail activate"; 
    } 

및 응용 프로그램을 매달리는 것 외에 다른 명백한 오류는 발생하지 않았습니다.

발생하는 즉시 일 :

public activate(stationId: string): void { 
     setTimeout(function() { 
      throw "Error in detail activate"; 
     }, 0); 
    } 

를 활성화 기능은 진행하지만 불행히도이 중이 오류를 추적하는 possilbe되지 않은이 상황에서?

나는 정품 인증 시점에서 응용 로직을 수행하는 방법을 찾아야하지만, 이러한 오류가 단순히 삼킨 것이 아니라면 유용 할 것이라고 우려했다.

두란 달 (Durandal)을 조금 더 조사하고 파기했습니다.

오류가 계속 사라집니다. Durandal이 오류를 기록하려고하는 명백한 시도에도 불구하고. activator.js 정품 인증 기능을 살펴 보았습니다.

try { 
    result = invoke(newItem, 'activate', activationData); 
} catch (error) { 
    system.error(error); 
    callback(false); 
    return; 
} 

기본적으로 catch 조건이 실행되고 시스템 오류가 호출됩니다. 결과는 녹아웃 바인딩 등으로 사라지는 것 같습니다. 어쨌든이 오류를 더 잘 보이게 할 수 있습니까? 지금은 activator.js에 breakpoint를 두는 것으로 막혀 있습니다.

durandal 버전 2.0.1을 사용 중입니다.

+0

'activate '는 뷰가 그 시점에서 렌더링되기 때문에 렌더링 뷰와 연관된 로직을위한 장소가 아닙니다. 다른 무엇보다도보기에 사용할 데이터를 준비하는 곳입니다. 뷰 렌더링을 위해서는'attached'와'compositionComplete'을 찾아야합니다. 'attached'와'compositionComplete' 시그니처는 그들의 인수에서 뷰에 접근을 제공합니다. 그 두 가지 방법 중 하나에 코드를 옮겨야하는지 궁금합니다. –

답변

0

system.debug를 사용하도록 설정합니다. 이렇게하면 durandal이 콘솔에 오류를 기록합니다.

예. 초기 부팅 모듈이 canActivate() 작동

define(['durandal/app', 'durandal/viewLocator', 
    'durandal/system', 'plugins/router', 'services/logger'], boot); 

function boot (app, viewLocator, system, router, logger) { 

    // Enable debug message to show in the console 
    system.debug(true); 

    // and so on 
} 

에서, 또한 활성화 작동() 당신의 setTimeout을 사용하는 경우(). 그것은 setTimeout() 없이는 activate()에서 작동하는 것처럼 보이지 않습니다.

디버깅 :에서는 setTimeout 호출없이 canActivate()의 로직이 수행

단지 durandal 시스템, 라우터 및 JQuery와 내부에서의 방법을 포함하는 스택 추적 될 것이다. 문제가되는 부분에 대해서는 여전히주의해야합니다.

그러나 setTimeout()에 대한 호출을 통해 논리를 수행하면 오류가 발생한 위치를 정확히 알려주는 스택 추적을 얻을 수 있습니다.

+0

좋습니다! system.debug (true)를 확인하려고 생각하지 않았습니다. 환경. 슬프게도 설정되어 있습니다 :-(콘솔 로깅에 유용한 것을 보지 못했습니다 –

+0

어떤 브라우저에서 작업하고 있습니까? Chrome과 IE11에서 위 테스트를 실시했습니다. 또한 코드는 Typescript와 같은데 테스트에서는 테스트하지 않았습니다. – JamesT

+0

예 잘 찾아 냈습니다. 타이프 스크립트입니다. 문제는 아닌지, 저는 IE11을 사용하고 있습니다. Chrome을 신속하게 제공 할 것입니다. 물을 혼란스럽게 할 수도있는 한 가지 방법은 오류가 발생합니다. 내가 제거하고 싶습니다 웹 필수 플러그인. –