Function YUI3、模块、名称空间、调用函数
我想将javascript代码从我的页面移植到YUI3。在阅读了这里的许多帖子(问题和答案)以及YUI3页面和教程中的大量信息后,我得出结论,最好的方法是将代码拆分为模块,因为它允许我仅在需要时以友好方式加载脚本 我想将代码组织在不同的子模块中,这些子模块应该由核心模块加载和管理(如果需要) 我想我已经理解了如何以友好的方式加载它们,但我现在的问题是,我并不总是能够在一个模块内调用公共方法,也不能将一个模块组成另一个模块。有时它可以工作,但有时我会收到这样一条信息:Function YUI3、模块、名称空间、调用函数,function,module,yui,yui3,namespace-organisation,Function,Module,Yui,Yui3,Namespace Organisation,我想将javascript代码从我的页面移植到YUI3。在阅读了这里的许多帖子(问题和答案)以及YUI3页面和教程中的大量信息后,我得出结论,最好的方法是将代码拆分为模块,因为它允许我仅在需要时以友好方式加载脚本 我想将代码组织在不同的子模块中,这些子模块应该由核心模块加载和管理(如果需要) 我想我已经理解了如何以友好的方式加载它们,但我现在的问题是,我并不总是能够在一个模块内调用公共方法,也不能将一个模块组成另一个模块。有时它可以工作,但有时我会收到这样一条信息:xxx不是一个函数 可能问题是
xxx不是一个函数
可能问题是我不知道如何设置全局名称空间(例如MyApp
)并在该名称空间中“播放”
我希望能够通过以下方式调用方法:MyApp.Tabs.detectTabs()
。。。来自主模块(MyApp.Core
)和同一子模块(MyApp.Tabs
)的方法
以下是我的代码结构:
内联javascript:
var MyAppConfig = {
"tabpanels":{"ids":["navigation"]},
"events": [{"ids": ["main_login", "dictionary_login"],
"type": "click",
"callback": "MyApp.Core.updateContent",
"params":{
}
}]
};
YUI_config = {
filter: 'debug',
groups: {
'myapp': {
modules: {
'project-myapp-core': {
fullpath: 'http://www.myapp.com/scripts/Core.js',
requires: ['node-base']
},
'project-myapp-tabs': {
fullpath: 'http://www.myapp.com/scripts/Tabs.js',
requires: ['base', 'project-myapp-core', 'history', 'tabview', 'tabview-base']
}
}
}
}
};
YUI(YUI_config).use('node', 'base', 'project-myapp-core', function(Y) {
var MyApp = {};
MyApp.Core = new Y.MyApp.Core();
Y.on('domready', MyApp.Core.begin, Y, null, application);
});
模块:核心文件:
YUI.add('project-myapp-core', function(Y) {
function Core(config) {
Core.superclass.constructor.apply(this, arguments);
}
Core.NAME = 'myapp-core';
Core.ATTRS = {};
var MyApp;
MyApp = {};
Y.extend(Core, Y.Base, {
initializer: function (cfg) {
},
begin: function(e, MyAppConfig) {
MyApp.Core = instance = this;
if (MyAppConfig.tabpanels) {
YUI().use('node', 'project-myapp-tabs', function(Y) {
MyApp.Tabs = new Y.MyApp.Tabs();
});
}
if (MyAppConfig.events) {
MyApp.Core.prepareEvents(MyAppConfig.events);
// I get "MyApp.Core.prepareEvents is not a function"
}
},
prepareEvents: function(e) {
},
updateContent: function() {
}
});
Y.namespace('MyApp');
Y.MyApp.Core = Core;
}, '0.0.1', { requires: ['node-base'] });
子模块:选项卡文件: 我应该在哪里定义全局变量,名称空间。。。?我应该如何调用这些函数 提前谢谢
--Oriol--因为没有任何东西依赖于
项目myapps选项卡,YUI不包括它。在您的内联JS中尝试以下操作:
YUI(YUI_config).use('node', 'base', 'project-myapp-tabs', function(Y) {
请参阅以获取一些提示。
YUI(YUI_config).use('node', 'base', 'project-myapp-tabs', function(Y) {