【问题标题】:requirejs loading my jquery plugin asyncrequirejs 异步加载我的 jquery 插件
【发布时间】:2013-04-18 16:40:39
【问题描述】:

我有一个 函数,它通过首先使用 RequireJS 加载插件来调用 jquery 插件函数,问题是 requirejs 中的插件函数只有在我的函数已经返回后才会执行,所以 hasMessageParent 总是返回 null。我真的很困惑,因为这之前工作正常,我不知道发生了什么变化和坏了。我该如何解决,以便在继续之前将 myMsg 设置为函数返回?

hasMessageParent: function() {
    var myMsg = null;
    var ctrl = '#myDiv';
    require(["my_msgcheck"], function() {
        // this gets executed after the return already happened, it returns true
        myMsg = $(ctrl).msg_check('hasMessage');
    });
    // this always returns null because the require jquery plugin function is executed after the return already happened
    return myMsg ;
},

【问题讨论】:

    标签: javascript asynchronous requirejs jamjs


    【解决方案1】:

    您无法通过单独修改函数来解决此问题,您必须将“my_msgcheck”添加到模块的定义调用中。

    如果您真的只想在该函数中加载回调,则另一种选择是使用回调。但这可能是代码结构错误的标志。

    var hasMessageParent = function(callback) {
        var myMsg = null;
        var ctrl = '#myDiv';
        require(["my_msgcheck"], function() {
            // this gets executed after the return already happened, it returns true
            myMsg = $(ctrl).msg_check('hasMessage');
            callback(myMsg);
        });
    };
    hasMessageParent(function (msg) {
        // ...
    });
    

    【讨论】:

    • 哇,聪明,谢谢!回调有效,但是我不明白您提到的第一种修复方法,将定义调用添加到哪个模块?
    • @user391986 我的意思是,如果你想直接返回myMsg,则必须在调用函数之前调用require。但是 requirejs 方式是将您的代码定义为模块:requirejs.org/docs/api.html#define
    猜你喜欢
    • 2015-04-21
    • 1970-01-01
    • 2014-08-06
    • 1970-01-01
    • 2020-10-24
    • 1970-01-01
    • 1970-01-01
    • 2015-06-26
    • 1970-01-01
    相关资源
    最近更新 更多