requirejs加载我的jquery插件异步

时间:2013-04-18 16:40:39

标签: javascript asynchronous requirejs jamjs

我有一个函数,通过首先使用 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 ;
},

1 个答案:

答案 0 :(得分:1)

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

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

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) {
    // ...
});