【问题标题】:How do you load a javascript file into a scope如何将 javascript 文件加载到作用域中
【发布时间】:2014-04-15 13:02:36
【问题描述】:

我正在尝试弄清楚如何将 JavaScript 文件的内容加载到作用域中。这样做的原因是我希望能够具有即插即用功能,并且能够将不同的功能加载到我的应用程序中。也许用户角色决定了加载什么功能,或者我想为给定的客户端定制我的应用程序。

这是我的一个可插入 JavaScript 文件的内容示例:

myApp.LoginViewModel = (function ()
{
    //DATA
    var self = this;

    return {
        HelloWorld: function ()
        {
            alert('Hellow World from Login View Model');
        }
    };
})();

下面是一个配置文件示例,列出了应该加载哪些 JS 文件:

var myApp = myApp || {};

myApp.ViewModelRegistry =
{
    BaseViewModel: { JavaScriptPath: "/Scripts/ViewModels/BaseViewModel.js"},
    LoginViewModel:{ JavaScriptPath: "/Scripts/ViewModels/LoginViewModel.js"}
};

这是我循环通过 ViewModelRegistry 并使用 jQuery 加载脚本的代码:

    InitializeApp: function ()
    {
        //REGISTER VIEW MODELS
        for (var viewModelName in myApp.ViewModelRegistry)
        {
            var registeredModel = myApp.ViewModelRegistry[viewModelName];

            $.getScript(registeredModel.JavaScriptPath, function (data, textStatus, jqxhr)
            {
            });
        }

        console.log(myApp);
    }
};

我的目标是将 JS 文件中的 JavaScript 函数加载到 myApp 范围内。每个可插入的 JS 文件都限定为 myApp。我认为简单地使用 jQuery 的 getScript 加载 JS 文件会自动更新 myApp 范围,因为所有可插入的 JS 文件都是针对该范围设计的。但是,console.log(myApp) 不会显示 JS 文件中的代码。我错过了什么?这甚至可行吗?

【问题讨论】:

    标签: javascript jquery architecture client-side


    【解决方案1】:

    我相信您的 console.log 是在您的任何 JS 文件被检索和解析之前执行的。除此之外,您似乎走在正确的道路上。这绝对是可行的,用于描述您想要实现的目标的术语称为异步模块定义。

    【讨论】:

    • 是的,你是对的。我还没有完成加载 JS 文件。感谢您提供术语提示。
    猜你喜欢
    • 2019-11-13
    • 2013-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-02
    • 1970-01-01
    相关资源
    最近更新 更多