Require.js와 같은 것을 사용하지 않으면 애플리케이션이 사용자의 웹 브라우저에로드 될 때 애플리케이션 클라이언트 측 컨트롤러와 같은 것을 인스턴스화합니다. 이 방법으로 브라우저의 응용 프로그램 수명 동안 메모리에 각 컨트롤러의 단일 인스턴스가 유지됩니다.require.js로 작업하여 새로운 객체를 반복적으로 피하십시오.
Require.js가 도입되면 같은 것을 달성하기위한 관용적 인 방법은 무엇입니까?
Require.js와 같은 것을 사용하지 않으면 애플리케이션이 사용자의 웹 브라우저에로드 될 때 애플리케이션 클라이언트 측 컨트롤러와 같은 것을 인스턴스화합니다. 이 방법으로 브라우저의 응용 프로그램 수명 동안 메모리에 각 컨트롤러의 단일 인스턴스가 유지됩니다.require.js로 작업하여 새로운 객체를 반복적으로 피하십시오.
Require.js가 도입되면 같은 것을 달성하기위한 관용적 인 방법은 무엇입니까?
인스턴스가 아닌 AMD 모듈에서 클래스를 내보내는 것이 좋습니다. 예 :
// controllers/some_controller.js
define(function (require) {
function SomeController() {};
SomeController.prototype.foo = function() {};
return SomeController;
});
그리고 다른 곳에 당신의 객체의 라이프 사이클을 관리, 아마 당신 app.js에 당신이 할
// app.js
define(function (require) {
var SomeController = require("./controllers/some_controller");
var activeController;
...
router.on("/foo", function() {
if (activeController) {
activeController.destroy();
}
activeController = new SomeController();
});
});
같은 또는 당신은 당신이 말한 것처럼, 당신이 할 수있는, 컨트롤러는 싱글이 될 갖고 싶어 어쨌든이
// app.js
define(function (require) {
var controllers = {
"some": require("./controllers/some_controller")
};
var controllerCache;
function getController(name) {
if (!controllerCache[name]) {
controllerCache[name] = new controllers[name]();
}
return controllerCache[name];
}
var activeController;
...
router.on("/foo", function() {
if (activeController) {
activeController.exit();
}
activeController = getController("some");
});
});
같은 것을 할이 꽤 복잡한 예입니다,하지만 내 요점은 내가 당신의 모듈 수출 클래스를 추천한다는 것입니다 -하지 인스턴스를 -이 방법을 ' 이러한 객체와 라이프 사이클을 관리하는 방법을 제어하고, 클래스를 요구하고, 스텁하고, 모의 의존성을 제공 할 수 있기 때문에 테스트 가능성에도 도움이됩니다. (컨테이너를 사용하여 다양한 객체의 인스턴스를 조회하는 고급 예제는 http://www.slideshare.net/mixonic/containers-di을 참조하십시오. . 그는 심지어 AMD 모듈과 함께 그것을 사용하는 방법의 예제를 제공합니다)
희망이 다소 도움이됩니다.
UPDATE 물론 , 당신이 할 수있는 기능도 수출 함수 또는 객체와 해당하지만, 당신이 일을 인스턴스화 또는 모듈의 최상위 수준에 일을 실행하지 않을 가능성이 높습니다 어떤 다른 - 최고의 require.js의 일부가 아닌 응용 프로그램 흐름의 일부로 모듈 플로우를 수행하십시오.
RequireJs 모듈은 어쨌든 싱글 톤입니다. – Bergi