首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript自包含沙箱事件和客户端堆栈

Javascript自包含沙箱事件和客户端堆栈
EN

Stack Overflow用户
提问于 2010-09-02 15:29:47
回答 1查看 1.2K关注 0票数 8

我正在将JSF重型web应用程序迁移到REST,主要是JS模块应用程序。

我看过Nicholas Zakas在YUI剧院(优秀视频)上的“可伸缩的javascript应用程序体系结构”,并成功地实现了其中的大部分内容,但我有一些问题:

  1. --我觉得这个讲座在模块和沙箱之间的关系上有点混乱,一方面,我的理解是,模块不应该受到沙箱之外发生的事情的影响,这就是为什么它们通过沙箱发布事件(而不是通过核心,因为核心是隐藏基本库),但是应用程序中的每个模块都得到了一个新的沙箱?沙箱不应该将事件限制在使用它的模块上,还是应该跨页发布事件?如果我有两个可编辑的表,但我想将每个表包含在不同的沙箱中,并且它的事件只影响沙箱内的模块,就像每个表都是不同的模块/小部件的消息框一样,我如何在每个模块中使用沙箱来实现这一点,当然,我可以在事件前缀加上模数,但这会造成我想要避免的耦合.我不想把模块打包成一个模块,因为我已经有6-7个模块了。

  1. 虽然我可以隐藏基库来处理一些小事情,比如id选择器等等。我仍然希望使用基库来进行模块依赖和资源加载,并使用类似于YUI加载器或dojo.require之类的东西,因此实际上我隐藏了基本库,但是模块本身是由基库定义和加载的.我觉得有点奇怪。--

  1. 库不返回简单的js对象,但通常会对它们进行包装,例如:您可以做一些类似$$('.classname').each(..之类的操作,这可以大量地清除代码,封装基本库是没有意义的,然后在模块中通过执行.each为基本库创建一个依赖项,但不使用这些特性会使编写的大量代码被忽略……实现该功能非常容易出错。

  1. ,有人有建立这个订单的前端堆栈的经验吗?更改基础库和/或拥有来自不同库的模块(使用yui但使用dojo . ?

进行表单验证)有多容易?

  1. 某种程度上是2+4的组合,如果您选择执行我所说的操作,并通过YUI加载器为输入加载dojo表单验证小部件,这是否意味着dojocore是一个模块,而表单模块依赖于它呢?

EN

回答 1

Stack Overflow用户

发布于 2011-04-24 04:00:10

我们在应用程序中大量使用这种模式。有关如何实现Sandbox模式的详细内容,请参阅Stoyan Stoyan的“JavaScript Patterns”一书。基本上看起来是这样的:

代码语言:javascript
复制
(function (global) {
    var Sandbox = function fn (modules, callback) {
        var installedModules = Sandbox.modules,
            i = 0,
            len = modules.length;

        if (!(this instanceof fn)) {
            return new fn(modules, callback);
        }

        // modules is an array in this instance:
        for (; i < len; i++) {
            installedModules[modules[i]](this);
        }

        callback(this);
    };

    Sandbox.modules = {};
    global.Sandbox = Sandbox;

})(this);

// Example module:
// You extend the current sandbox instance with new functions
Sandbox.modules.ajax = function(sandbox) {
    sandbox.ajax = $.ajax;

    sandbox.json = $.getJSON;
};

// Example of running your code in the sandbox on some page:
Sandbox(['ajax'], function(sandbox) {

    sandbox.ajax({
        type: 'post',
        url: '/Sample/Url',
        success: function(response) {
            // success code here. remember this ajax maps back to $.ajax
        }
    });

});
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3628649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档