Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript自包含沙盒事件和客户端堆栈_Javascript_Jsf_Dom Events_Client Side - Fatal编程技术网

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

Javascript自包含沙盒事件和客户端堆栈,javascript,jsf,dom-events,client-side,Javascript,Jsf,Dom Events,Client Side,我正在将一个使用JSF的web应用程序迁移到REST,主要是JS模块应用程序 我在YUI theater(优秀视频)上观看了Nicholas Zakas的“可伸缩javascript应用程序架构”,我成功地实现了大部分演讲,但我有一些问题: 关于模块和沙盒之间的关系,我发现讲座有点混乱,一方面,据我理解,模块不应该受到沙盒之外发生的事情的影响,这就是为什么它们通过沙盒发布事件(而不是通过核心,因为核心是为了隐藏基库)但是应用程序中的每个模块都有一个新的沙箱?沙盒是否应该将事件限制在使用它的模块中

我正在将一个使用JSF的web应用程序迁移到REST,主要是JS模块应用程序

我在YUI theater(优秀视频)上观看了Nicholas Zakas的“可伸缩javascript应用程序架构”,我成功地实现了大部分演讲,但我有一些问题:

  • 关于模块和沙盒之间的关系,我发现讲座有点混乱,一方面,据我理解,模块不应该受到沙盒之外发生的事情的影响,这就是为什么它们通过沙盒发布事件(而不是通过核心,因为核心是为了隐藏基库)但是应用程序中的每个模块都有一个新的沙箱?沙盒是否应该将事件限制在使用它的模块中,或者应该跨页面发布事件?e、 g:如果我有两个可编辑的表,但我想将每个表包含在不同的沙盒中,并且它的事件只影响该沙盒中的模块,比如每个表的消息框是不同的模块/小部件,那么如何使用每个模块的沙盒来实现这一点,当然,我可以用moduleid作为事件的前缀,但这会产生我想要避免的耦合。。。我不想将模块打包为每个组合一个模块,因为我已经有6-7个模块了

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

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

  • 有人有过构建这种顺序的前端堆栈的经验吗?使用yui datatable但使用dojo进行表单验证,更改基础库和/或使用不同库的模块有多容易

  • 如果您选择像我说的那样,通过YUI loader为输入加载dojo表单验证小部件,这是否意味着dojocore是一个模块,表单模块依赖于它


  • 我们在应用程序中大量使用此模式。请参阅Stoyan Stefanov的《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
            }
        });
    
    });
    
    (功能(全局){
    var Sandbox=函数fn(模块、回调){
    var installedModules=Sandbox.modules,
    i=0,
    len=模块长度;
    如果(!(此实例为fn)){
    返回新的fn(模块、回调);
    }
    //在此实例中,模块是一个数组:
    对于(;i
    我非常感兴趣的是如何组合JSF(特别是它的后端连接器,如a4j:jsFunction)为了封装JavaScript模块?!嗨,Nikita,我没有连接JSF,我替换了它,基本上我使用了封装在JSF bean中的后端服务,并通过ReST映射将它们公开,然后用纯JS编写了一个接口。installedModules没有在任何地方声明……这是全局的还是键入错误?