(function (window, document, $, undefined) {
"use strict";
//we cache a few useful values, like jQuery wrapped window and document
var $window = $(window),
$document = $(document),
ProjectManagement = {
// Cache Properties
cache: {
jsonPromiseCache: {},
},
init: function(){
console.log('ProjectManagement.init() Function ran');
// Call the User module
ProjectManagement.modules.User.populateUserlistJson('test userlistJsonData data');
},
modules: {
User: {},
Milestones: {},
Tasks: {},
},
};
// Run Init on DOM Ready
$(function() {
ProjectManagement.init();
});
}(this, document, jQuery));
基于上面这个确切的代码结构。如何将具有类似样式函数和属性的Object加载到此属性中:
ProjectManagement.modules.User
这样的内容会加载到上面的代码中,我有ProjectManagement.modules.User
...
(function(){
ProjectManagement.modules.User = {
cache: {
userlistJson: '',
},
init: function(){
console.log('ProjectManagement.modules.User.init() Function ran');
},
populateUserlistJson: function(userlistJsonData){
ProjectManagement.modules.User.cache.userlistJson = userlistJsonData;
console.log('ProjectManagement.modules.User.populateUserlistJson(userlistJsonData) Function ran from ProjectManagement.init()', userlistJsonData);
},
getUsers: function(){
},
};
})();
使用JSFiddle演示进行更新
http://jsfiddle.net/jasondavis/cpvsado1/
在演示中,我收到此错误Uncaught TypeError: ProjectManagement.modules.User.populateUserlistJson is not a function - line 44
第44行是ProjectManagement.modules.User.populateUserlistJson('test userlistJsonData data');
,它位于ProjectManagement.init()
函数内。
如果我尝试将ProjectManagement.modules.User
的代码放在ProjectManagement
的代码之上,那么我会在下面收到此错误,因为我的ProjectManagement
对象尚未定义:
Uncaught ReferenceError: ProjectManagement is not defined - line 25
第25行是用户对象代码的开头:ProjectManagement.modules.User = {
我正在寻找帮助修改ProjectManagement.modules.User
代码,以便我可以在我的核心ProjectManagement
对象中访问此函数和属性。
我的真实项目有大约6,000行代码,我不想完全改变它的核心结构,但是我的"模块的结构"可以根据需要进行更改,以便能够以我描述的方式工作。
在我的核心ProjectManagement
对象中,我希望能够简单地将代码加载到每个模块的页面中,并且可以在ProjectManagement
obnject
答案 0 :(得分:2)
此处的主要问题:ProjectManagement
是一个局部变量,因此无法从另一个函数访问。
您可以将此对象添加到window
对象,并将其用作全局对象。
您也可以将此对象传递给函数:
(function (window, document, $, undefined) {
"use strict";
//we cache a few useful values, like jQuery wrapped window and document
var $window = $(window),
$document = $(document),
ProjectManagement = {
// Cache Properties
cache: {
jsonPromiseCache: {},
},
init: function(){
console.log('ProjectManagement.init() Function ran');
// Call the User module
ProjectManagement.modules.User.populateUserlistJson('test userlistJsonData data');
},
modules: {
User: {},
Milestones: {},
Tasks: {},
},
};
// Run Init on DOM Ready
$(function() {
ProjectManagement.init();
});
window.ProjectManagement = ProjectManagement;
}(this, document, jQuery));
(function(ProjectManagement){
ProjectManagement.modules.User = {
cache: {
userlistJson: '',
},
init: function(){
console.log('ProjectManagement.modules.User.init() Function ran');
},
populateUserlistJson: function(userlistJsonData){
ProjectManagement.modules.User.cache.userlistJson = userlistJsonData;
console.log('ProjectManagement.modules.User.populateUserlistJson(userlistJsonData) Function ran from ProjectManagement.init()', userlistJsonData);
},
getUsers: function(){
},
};
})(window.ProjectManagement);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>