2013-04-18 45 views
0

我有一个功能由先用RequireJS问题加载插件调用jQuery插件功能是插件功能里面后,我的功能已经恢复,从而requirejs只被执行hasMessageParent总是返回null。我真的很困惑,因为这之前工作正常,我不知道有什么变化和打破。我如何修复,让myMsg在继续之前被设置为函数返回?requirejs加载我的jQuery插件异步

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

您不能通过单独修改函数来解决此问题,您必须将“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) { 
    // ... 
}); 
+0

谢谢!回调的作品,但我不明白的第一种方法来解决你提到的,添加定义调用哪个模块? – user391986

+0

@ user391986我的意思是,如果要直接返回myMsg,则必须在函数调用之前发生require调用。但requirejs的方式是将您的代码定义为模块:http://requirejs.org/docs/api.html#define – jgillich

+0

好的,非常感谢jgillich! – user391986