基于打字稿模块的应用程序的通用与应用程序初始化

时间:2014-05-23 03:27:59

标签: typescript

我正在将现有的JS应用程序(购物车+相关网站)移到Typescript。

我现在在JS文件中有很多函数来初始化不同的外部组件

    // Initialize components
    initBrowser();
    initKnockout();
    initModernizr();
    initjQM();
    initGoogleAnalytics();

他们设置了从window.console.logknockout.js绑定,自定义Modernizr.js测试和jQuery移动页面转换逻辑的所有内容。

我的问题是如何在Typescript模块中最好地用模块来组织和初始化这样的事情。 (我的应用很小,我只使用内部模块)

选项1:没有'类'的模块只是初始化一切

module RR
{
     initBrowser();
     initKnockout();
     initModernizr();
     initJQM();
     initGoogleAnalytics();

     // define functions
}

选项2:具有'静态初始化程序的模块'类

module RR 
{
    class AppInitializer
    {
        private static instance:AppInitializer = new AppInitializer(); 

        constructor()
        {
           initBrowser();
           initKnockout();
           initModernizr();
           initJQM();
           initGoogleAnalytics();             
        }

        // define functions
     }
}

选项3:初始化所有内容并且仅创建一次的单个应用程序对象

module RR 
{
    class MyApp
    {    
        constructor()
        {
           init();             
        }

        init()
        {
            initBrowser();
            initKnockout();
            initModernizr();
            initJQM();
            initGoogleAnalytics(); 
        }

        // define functions
     }

     // create the application
     var MyApp = new MyApp();

}

选项4:......你的想法......

初始化此类与特定应用程序模块或类无关的内容的好方法。

此外,我还有其他初始化函数来设置我的jQuery不显眼的初始化,例如。我的登录按钮,客户服务页面逻辑。这些功能特定于实际网站,与我之前提到的功能不同

    // initialize shopping cart
    initLogin();
    initCustomerService();
    initVideo(true);

到目前为止,我只是在一次关闭中一次性初始化了所有内容,但是我希望能够更好地组织事情,并希望得到任何建议。

1 个答案:

答案 0 :(得分:1)

您可以使用外部模块Bootstrap.ts

// Load components
import initBrowser = require('./initBrowser');
import initKnockout = require('./initKnockout');
import initModernizr = require('./initModernizr');
import initjQM = require('./initjQM');
import initGoogleAnalytics = require('./initGoogleAnalytics');

// Initialize components
initBrowser();
initKnockout();
initModernizr();
initjQM();
initGoogleAnalytics();

这样您就不必担心订购JavaScript文件了。代码编写方式明确,不必要地污染window

要详细了解外部模块:http://www.youtube.com/watch?v=KDrWLMUY0R0&hd=1