현재 일부 맞춤 파일 형식 (구성 파일을 편집 할 수있는 인터페이스를 제공하는 작은 편집기)을 편집하기 위해 웹 응용 프로그램을 개발 중입니다. 이 응용 프로그램의 핵심 요소는 감지 된 구성 파일 유형에 따라 올바른 인터페이스를 트리거하는 래퍼 인 "FileReader"라는 개체입니다. 이 방법은 그냥 새로운 FileReader (src)를 생성합니다. - src는 url 또는 blob이므로 깨끗하게 유지합니다.요구 사항 및 비동기 및 순환 종속성
일단 구성 파일의 유형이 검색되면 래퍼는 연관된 인터페이스가 있는지 확인하고 간단하게 사용합니다. 각 인터페이스 (각 다른 구성 유형에 대한)는 별도의 JS 파일에 정의됩니다. 래퍼가 완전히로드되면 모든 이벤트를 연결하고 앱 실행이 시작됩니다. 내가 requirejs 이용할 수 있도록 응용 프로그램을 변환하기로 결정
<!doctype html>
<html><head></head>
<body>
<div id="UI"></div>
<script src="js/fileReader/fileReader.js" >App.FileReader = function(){ ... }</script>
<script src="js/fileReader/configType1.js" >App.FileReader.registerFileType("config1",object)</script>
<script src="js/fileReader/configType2.js" >App.FileReader.registerFileType("config2",object)</script>
<script src="js/fileReader/configType3.js" >App.FileReader.registerFileType("config3",object)</script>
<script src="js/main.js" >App.run();</script>
</body>
</html>
지금 앱이 자라 :
다음은 HTML의 I는 관련 요소와 함께 사용 골격이다. 내 문제는 대부분 파일 형식 모듈이로드 된 후에 FileReader를 사용할 준비가되었지만 먼저 파일 형식 모듈을로드 할 수 없다는 점만 고려하면 "가장 좋은 조직은 무엇인가"에 관한 것입니다. mainWrapper를 사용하여 유형을 등록하십시오. 내가 가지고 올 수
최선의 구조는 다음과 같습니다
main.js :
require(['require','FileReader','./fileReader/config1','./fileReader/config2','./fileReader/config3'],
function(require) {
require(['require','./core/app'], function(require , App) {
App.run(window) ;
});
});
});
fileReader.js :
define(function() {
...
return FileReader ;
});
config1.js :
define(['FileReader'], function (FileReader) {
var Interface = ... ;
...
App.FileReader.registerFileType("config1",Interface)
return FileReader ;
});
app.js :
define(['FileReader'], function (FileReader) {
var App = function(){} ;
App.run = function(){ FileReader.openFile(...) ; ... } ;
return App ;
});
내 문제는 무엇입니까? FileReader 객체에 올바른 Interface 객체가 포함되도록하려면 requirejs를 수동으로 강제로 모든 FileReader 관련 파일을로드 한 다음 주 앱 파일을로드해야합니다. 이렇게하면 App 객체가 FileReader 객체를 요청하면 이미 올바른 인터페이스가 등록되어 있습니다. 내가 달성하고 싶은 것은 "./core/app"메인 파일 "./fileReader"에 코어/앱 파일 에 요청한 다음 처음로드하는 동안 괜찮을 것입니다. fileReader 파일에서 config-type 모듈을로드 할 수 있으면 모든 항목을 등록한 다음 대답 만 반환합니다.
이었다 내가 시도 : (을 FileReader에서)
fileReader.js :
define(["require"],function (require) {
...
require(["config1","config2","config3"],
function(){
//occurs asynchronously, after the App.run() is triggered because of the synchronous return
callback(FileReader) ; //unfortunately I did not find any callback of this sort
//if it existed I could asynchronously find the list of the modules in the directory, load the them, and only then fire this fictive "ready" event
}
return FileReader ; //the first return occurs synchronously, so before the the fileReader is ready : modules are missing
});
그래서 사이 순환 종속성 일종의 (모듈의 종류를로드하는 가장 좋은 방법은 무엇입니까 구성 유형 파일과 주 FileReader)? 내가 config-type 디렉토리에서 사용할 수있는 것을 읽을 수 있도록 강제로 비동기식으로 만들고 싶습니다. 간단한 HTML 스크립트 목록으로 올바른 순서로로드되었고 모듈 목록에 쉽게 액세스 할 수있게되었습니다. 이제 앱이 시작되기 전에 모든 것이 준비되었는지 확인하고 싶습니다.
필자는 필자가 필요로하는 것을 더 잘 지원하기 위해 requirejs 소스 코드를 편집 할 수있었습니다. 이제는 괜찮습니다. 응답 주셔서 감사합니다 :) – Demurgos