Function YUI3、模块、名称空间、调用函数

Function YUI3、模块、名称空间、调用函数,function,module,yui,yui3,namespace-organisation,Function,Module,Yui,Yui3,Namespace Organisation,我想将javascript代码从我的页面移植到YUI3。在阅读了这里的许多帖子(问题和答案)以及YUI3页面和教程中的大量信息后,我得出结论,最好的方法是将代码拆分为模块,因为它允许我仅在需要时以友好方式加载脚本 我想将代码组织在不同的子模块中,这些子模块应该由核心模块加载和管理(如果需要) 我想我已经理解了如何以友好的方式加载它们,但我现在的问题是,我并不总是能够在一个模块内调用公共方法,也不能将一个模块组成另一个模块。有时它可以工作,但有时我会收到这样一条信息:xxx不是一个函数 可能问题是

我想将javascript代码从我的页面移植到YUI3。在阅读了这里的许多帖子(问题和答案)以及YUI3页面和教程中的大量信息后,我得出结论,最好的方法是将代码拆分为模块,因为它允许我仅在需要时以友好方式加载脚本

我想将代码组织在不同的子模块中,这些子模块应该由核心模块加载和管理(如果需要)

我想我已经理解了如何以友好的方式加载它们,但我现在的问题是,我并不总是能够在一个模块内调用公共方法,也不能将一个模块组成另一个模块。有时它可以工作,但有时我会收到这样一条信息:
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) {