RequireJS - 如何有条件地公开模块的功能?

时间:2017-06-27 15:43:57

标签: javascript requirejs

我有一个模块,其中包含两个读取功能。一个使用FileReader,另一个使用XHR读取文件。单页面应用程序的不同模块使用此模块。

我希望能够运行该应用只使用其中一个。有没有办法通过data-main js文件中的require.config来做到这一点?理想情况下,通过url参数设置的标志(例如?mode = file | xhr)可用于此设置。

请参阅下面的当前模块代码,其中公开了两个功能。其他模块使用它但开发人员必须在两个功能之间手动切换。而不是当模块第一次加载时,我想只公开一个读取函数,所有其他模块使用它而不知道引擎盖下使用的是什么。公开内容的条件来自app设置或url param。

define(['somedep'], function(somedep) {
     function fileReader(){...};
     function xhrReader(){...};
     return { 
          fr: fileReader, xr: xhrReader
     }
}

1 个答案:

答案 0 :(得分:0)

如果我正确阅读 - 我应该说它高度依赖于“app parameters”的含义,你可以在模块中进行条件检查。

define(['somedep'], function(somedep) {

    function isXHR(){
        // do your testing logic (parese the URL | look for the app parameters) such that you can return a boolean
        return boolean_test_result;
    };

    function fileReader(){...};
    function xhrReader(){...};

    if ( isXHR() ){
        return {
            new_consolidated_method_name: xhrReader
        };
    } else {
        return { 
            new_consolidated_method_name: fileReader
        }
    }
}

isXHR函数可以很容易地isFile;关键是这是一个二元决策,可以表示为boolean并解释为true。无论条件是false,您都可以推断正面是new_consolidated_method_name。引入fr意味着您必须重构依赖于使用xrif(null == we.getAttribute("alt")){ }的模块/方法,但您也可以自己测试在所有这些实例中使用哪些模块/方法。