2015-11-14 51 views
0

我試圖修改我的代碼,使其與Require.js一起工作,但我遇到了一些問題,其中一些依賴關係未定義,我相信它們應該是。處理require.js中的未定義依賴關係

的最小工作實施例由下面的文件給出:

main.js

// Configure require.js 
requirejs.config({ 
    baseUrl: "js/app", 
}); 

require(["app"], function(app) { 
    app.init(); 
}); 

app.js

define(["container", "renderer"], function (CONTAINER, RENDERER) { 
    return { 
    init: function() { 
     CONTAINER.init(); 
     RENDERER.init(); 
     console.log(CONTAINER, RENDERER) 
    }, 
    } 
}); 

container.js

define(["renderer"], function (RENDERER) { 
    // define container 
    var container = new Object(); 
    return { 
    container: container, 
    init: function() { 
     console.log(RENDERER) 
    }, 
    } 
}); 

renderer.js

define(["container"], function (CONTAINER) { 
    var renderer = new Object(); 
    return { 
    renderer: renderer, 
    init: function() { 
     console.log(CONTAINER); 
    }, 
    } 
}); 

的問題是,在renderer.jsCONTAINERundefined。控制檯顯示這在瀏覽器中運行時:

enter image description here

爲什麼CONTAINERundefinedrenderer.js,而它在app.js定義就好了?

+0

避免循環依賴關係:) http://stackoverflow.com/questions/4881059/how-to-handle-circular-dependencies-with-requirejs-amd – jan

回答

2

容器和渲染器之間的循環引用。

我記得require.js明確地不允許這樣的循環引用,其中容器需要渲染器和渲染器需要容器。通過使應用程序

如果你想在對象之間的循環引用,你可以避開要求的限制設置屬性的渲染器,或在容器中,例如,通過調用一個函數像...

CONTAINER.init(RENDERER) 

...從應用內...

爲簡潔起見,省略了關於循環引用的惡意的詳細警告。