0

내 CRM 2011 양식의 모듈 패턴에 따라 JavaScript 로직을 고안했습니다. 양식을로드 할 때 때로는 'Crm object undefined'으로 경고가 표시되지만 새로 고침 (단일 또는 여러 번)하면이 오류가 사라집니다 (원활하게 작동 함).CRM 2011의 JavaScript 모듈 패턴을 사용하여 생성하지 않는 객체

매우 고생하고 난 후에 나는 왜 이런 일이 일어나는 지 아직도 이해할 수 없습니다. 모듈 패턴과 관련이 있습니까? 왜냐하면 onLoad 함수가 잘 해고 되었기 때문에 나를 귀찮게하는 것은 때때로 Crm 객체가 생성되지 않는다는 것입니다.

var Crm = (function (FSX) { 
    var xrm = { 
     date: { 
      setDate: function (sourceAttribute, targetAttribute) { 
       // ... date setting logic ... 
      } 
     } 
    } 
    return xrm.date; 
}(FSX)); 

function onLoad() { 
    if (typeof Crm === 'undefined') { 
     alert('Crm object undefined'); 
     return; 
    } 
    Crm.setDate("fsx_source", "fsx_target"); 
} 

답변

1

저는이 문제가 FSX 개체에 있다고 생각합니다. 어디서로드 되었습니까?

모듈을 정의하는 스크립트가 실행되기 전에로드되지 않은 경우 코드는 오류가 발생하고 Crm은 정의되지 않습니다.

here CRM 양식에 대한 의존 라이브러리를로드하는 방법이 있습니다.

여러 솔루션을 제안합니다 : 1) RequireJs 또는 HeadJs를 사용하여 종속 스크립트를 동적으로로드합니다. 2) 리본 명령에 포함하여 라이브러리로드.

+0

FSX가이 파일 앞에로드 된 다른 스크립트 파일에서 만듭니다. FSX가 어떻게 생성되지 않을 수 있습니까? 자바 스크립트가 비정상적으로 동작 할 수도 있다는 것을 의미합니까? –

+0

자바 스크립트가 아닙니다. CRM이 스크립트를로드하는 방법과 관련이 있습니다. 스크립트는 비동기 적으로로드됩니다. 위의 코드는 FSX가 완전히로드되기 전에 실행될 수 있습니다. 리본에 FSX 스크립트를로드 해보십시오. 리본 스크립트가 가장 먼저로드되고 잘하면 FSX가 작성된 후 스크립트가 실행됩니다. 위에서 언급 한 기사에는이 작업을 수행하는 방법에 대한 정보가 있습니다. –

+0

예, 유용한 기사입니다. –