Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.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 Requirejs:在模块内等待require函数_Javascript_Requirejs - Fatal编程技术网

Javascript Requirejs:在模块内等待require函数

Javascript Requirejs:在模块内等待require函数,javascript,requirejs,Javascript,Requirejs,我有一个简单的翻译类(模块),用于处理我的应用程序的本地化。在translate类中,我使用require函数加载所需的语言模块 define(['require', 'config', 'store'], function(require, Config, Store) { // Using ECMAScript 5 strict mode during development. By default r.js will ignore that. 'use strict';

我有一个简单的翻译类(模块),用于处理我的应用程序的本地化。在translate类中,我使用require函数加载所需的语言模块

define(['require', 'config', 'store'],
function(require, Config, Store) {
    // Using ECMAScript 5 strict mode during development. By default r.js will ignore that.
    'use strict';

    var translation = {
        locale: null,
        name: null,
        keys: null,
        timezones: null
    };

    var languageCode = Store.getInstance().get('LanguageCode') || Config.defaultLanguageCode;

    require(['translation/' + languageCode], function(trans) {
        translation = trans;
    });

    var get = function(key) {
        return (!!translation.keys && translation.keys[key]) ? translation.keys[key] : key;
    };

    var timezone = function(key) {
        return (translation.timezones[key]) ? translation.timezones[key] : key;
    };

    return {
        _: get,
        timezone: timezone,
        timezones: function() {
            return translation.timezones;
        }
    };
});
问题是return语句是在加载所需语言之前执行的。
我将translate类放在require shim中,以便在其他模块之前加载它,但这也不起作用

我找到了一个解决你确切问题的方法,而不用承诺。我使用函数
WaitFor
等待模块
require()
依赖项加载

这就是我的应用程序模块的外观:

define("App", ["Config"], function () {

    var queue = [];
    var fetchingId, cb;

    var App = {
        Dialog: null
    };

    require(["FloDialog"], function () {
        App.Dialog = new FloDialog();
    });

    return {
        WaitFor: function (id, callback) {
            if (!fetchingId) {
                fetchingId = id;
                cb = callback;
                require([id], function () {
                    cb(App);
                });
            } else {
                queue.push([id, callback]);
            }
        }
    };
});
请注意底部的
WaitFor
函数。当我需要如下所示的模块应用程序时,我使用
WaitFor
函数来真正地等待
require()
依赖项加载到模块中。在我的例子中,当它准备就绪时,我返回一个App变量,该变量现在包含App.Dialog变量(并与FloDialog类的实例一起加载)

在some-page.html上:

<script type="text/javascript">
  require(['App'], function (App) {

        App.WaitFor('FloDialog', function(App) {
            console.log(App.Dialog); // Yay! The instance is loaded and good to go!
        });

</script>

需要(['App'],函数(App){
App.WaitFor('FloDialog',函数(App){
console.log(App.Dialog);//耶!实例已加载,可以运行了!
});

我在不使用承诺的情况下找到了您的确切问题的解决方案。我使用函数
WaitFor
等待模块
require()
依赖项加载

这就是我的应用程序模块的外观:

define("App", ["Config"], function () {

    var queue = [];
    var fetchingId, cb;

    var App = {
        Dialog: null
    };

    require(["FloDialog"], function () {
        App.Dialog = new FloDialog();
    });

    return {
        WaitFor: function (id, callback) {
            if (!fetchingId) {
                fetchingId = id;
                cb = callback;
                require([id], function () {
                    cb(App);
                });
            } else {
                queue.push([id, callback]);
            }
        }
    };
});
请注意底部的
WaitFor
函数。当我需要如下所示的模块应用程序时,我使用
WaitFor
函数直接等待
require()
依赖项加载到模块中。在我的例子中,当它准备好时,我返回一个现在包含App.Dialog变量的应用程序变量(并与FloDialog类的实例一起加载)

在some-page.html上:

<script type="text/javascript">
  require(['App'], function (App) {

        App.WaitFor('FloDialog', function(App) {
            console.log(App.Dialog); // Yay! The instance is loaded and good to go!
        });

</script>

需要(['App'],函数(App){
App.WaitFor('FloDialog',函数(App){
console.log(App.Dialog);//耶!实例已加载,可以运行了!
});

你应该检查它会让你的生活更轻松谢谢你。我会检查它。你应该检查它会让你的生活更轻松谢谢你。我会检查它。